我正在用活动列表构建ListActivity(列表中的每个项目都是我的应用程序的活动)。当单击列表中的一项时,我想获取它的信息。大部分已经完成,但是尝试在onclick上检索项目数据时出现错误。
这就是我在做什么:
private class ActivityItem {
private CharSequence title;
private Class activityClass; // I didn't limit it to Activities because I might use it for Fragments
public ActivityItem(int titleResId, Class activityClass) {
this.title = getResources().getString(titleResId);
this.activityClass = activityClass;
}
@Override
public String toString() {
return title.toString();
}
}
private static ActivityItem[] mItems;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_items_not_added);
// Instantiate the list of samples.
ActivityItem[] mItems = new ActivityItem[]{
new ActivityItem(R.string.dialer, Example1.class),
new ActivityItem(R.string.clock, Example2.class),
};
setListAdapter(new ArrayAdapter<ActivityItem>(this, android.R.layout.simple_list_item_1, android.R.id.text1, mItems));
}
@Override
protected void onListItemClick(ListView listView, View view, int position, long id) {
Log.d("Title:", mItems[position].toString()); // This returns error
}
日志:
03-15 17:45:30.302 18134-18134/com.example.android.launcher E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.android.launcher, PID: 18134
java.lang.NullPointerException
at com.example.android.launcher.ItemsNotAdded.onListItemClick(ItemsNotAdded.java:92)
我究竟做错了什么?
最佳答案
此外,Item
是在onCreate()
中本地声明的-您无法访问该实例。只需使用
mItems = new ActivityItem[]{
new ActivityItem(R.string.dialer, Dialer.class),
new ActivityItem(R.string.clock, Clock.class),
new ActivityItem(R.string.flashlight, Flashlight.class),
new ActivityItem(R.string.contact_list, ContactList.class),
};
在
onCreate()
中,将改为分配static ActivityItem[] mItems
。否则将为null
。ps。如我所见,您使用
ListActivity
。在这种情况下,您也可以在getListView().getAdapter() getItem(int position)
中调用onListItemClick
。因此,不需要静态成员。检查ListActivities
API。