我想在按钮点击时显示一个简单的字符串数组列表,使用ListPopupWindow来实现。然而,当我进行最小的设置,使用ArrayAdapter<String>
或自定义适配器时,当我尝试显示弹出窗口时,会遇到资源未找到异常。这是我正在使用的代码(附带堆栈跟踪)。有什么想法吗?
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;
}
}
}
以下是堆栈跟踪信息(令我困惑的是它显示正在使用一个ArrayAdapter
,而我正在使用自定义适配器):
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]
非常感谢您的帮助!