Comment puis-je obtenir un ListPopupWindow de travailler avec un adaptateur personnalisé?

Je veux afficher un simple tableau de chaînes de caractères dans un ListPopupWindow qui est indiqué sur le bouton. Je suis en cours d'exécution dans les problèmes, cependant, que lorsque je fais un minimum d'installation d'un ArrayAdapter<String> ou un custom-built adaptateur, je tombe sur un ressources ne trouve pas exception quand je vais pour afficher la fenêtre contextuelle. Voici le code que j'utilise (avec la trace de la pile après). Toutes les idées de ce qui se passe?

public class AndroidSandboxActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button btn = (Button)findViewById(R.id.btn1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showListPopup(btn);
}
});
}
public void showListPopup(View anchor) {
ListPopupWindow popup = new ListPopupWindow(this);
popup.setAnchorView(anchor);
ListAdapter adapter = new MyAdapter(this);
popup.setAdapter(adapter);
popup.show();
}
public static class MyAdapter extends BaseAdapter implements ListAdapter {
private final String[] list = new String[] {"one","two","three"};
private Activity activity;
public MyAdapter(Activity activity) {
this.activity = activity;
}
@Override
public int getCount() {
return list.length;
}
@Override
public Object getItem(int position) {
return list[position];
}
@Override
public long getItemId(int position) {
return position;
}
private static int textid = 1234;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView text = null;
if (convertView == null) {
LinearLayout layout = new LinearLayout(activity);
layout.setOrientation(LinearLayout.HORIZONTAL);
text = new TextView(activity);
text.setId(textid);
layout.addView(text);
convertView = layout;
} else {
text = (TextView)convertView.findViewById(textid);
}
text.setText(list[position]);
return convertView;
}
}
}

Et voici la trace de la pile (la chose qui dépasse mon esprit, c'est qu'il dit que c'est à l'aide d'un ArrayAdapter quand je suis avec mon propre coutume adaptateur):

Thread [<1> main] (Suspended (exception Resources$NotFoundException))   
Resources.loadXmlResourceParser(int, String) line: 2047 
Resources.getLayout(int) line: 853  
PhoneLayoutInflater(LayoutInflater).inflate(int, ViewGroup, boolean) line: 389  
ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 375    
ArrayAdapter.getView(int, View, ViewGroup) line: 366    
ListPopupWindow$DropDownListView(AbsListView).obtainView(int, boolean[]) line: 2146 
ListPopupWindow$DropDownListView.obtainView(int, boolean[]) line: 1156  
ListPopupWindow$DropDownListView(ListView).measureHeightOfChildren(int, int, int, int, int) line: 1261  
ListPopupWindow.buildDropDown() line: 1083  
ListPopupWindow.show() line: 517    
AndroidSandboxActivity.showListPopup() line: 41 
AndroidSandboxActivity$1.onClick(View) line: 28 
Button(View).performClick() line: 3122  
View$PerformClick.run() line: 11942 
ViewRoot(Handler).handleCallback(Message) line: 587 
ViewRoot(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 132 
ActivityThread.main(String[]) line: 4028    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 491  
ZygoteInit$MethodAndArgsCaller.run() line: 844  
ZygoteInit.main(String[]) line: 602 
NativeStart.main(String[]) line: not available [native method]  

Toute aide serait appréciée!

OriginalL'auteur Kevlar | 2012-04-03