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
Vous devez vous connecter pour publier un commentaire.
J'ai compris pourquoi un
ArrayAdapter
n'a pas fonctionné; j'ai été le choix d'une mauvaise id de ressource pour l'adaptateur tableau, que je n'ai pas entièrement comprendre commentArrayAdapter
s concernant les vues de liste. À l'aide de cette fonction android ressource:dans les ressources pertinentes argument lors de la construction de la matrice de l'adaptateur, j'ai été en mesure d'obtenir des choses à travailler. Je ne sais pas exactement pourquoi ma coutume adaptateur ci-dessus ne fonctionnent pas, bien que, comme mon adaptateur personnalisé dans le code ci-dessus n'a pas de référence à un ID spécifique. La trace de la pile, j'ai fourni était probablement à partir d'une ancienne version du code qui ont fait usage d'une
ArrayAdapter
.OriginalL'auteur Kevlar