I want to display a simple array of strings in a ListPopupWindow that is shown on a button click. I'm running into problems however, as when I do some minimal setup of either an ArrayAdapter<String>
or a custom-built adapter, I run into a resources not found exception when I go to show the popup window. Here is the code I'm using (with the stack trace after it). Any ideas as to what is happening?
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;
}
}
}
And here's the stack trace (the thing that boggles my mind is that it says it's using an ArrayAdapter
when I'm using my own custom adapter):
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]
Any help would be appreciated!
I figured out why an ArrayAdapter
didn't work; I was choosing an incorrect resource id for the array adapter, as I did not entirely understand how ArrayAdapter
s worked regarding list views. Using this builtin android resource:
android.R.layout.simple_dropdown_item_1line
in the relevant resource argument when constructing the array adapter, I was able to get things to work. I'm not sure exactly why my custom adapter above didn't work, though, as my custom adapter in the code above didn't reference any specific ID. The stack trace I provided was probably from an old version of the code that did use an ArrayAdapter
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With