获取ListActivity中单击项目的信息?

时间:2014-03-15 21:03:41

标签: java android arrays

我正在构建一个包含活动列表的ListActivity(列表中的每个项目都是我的应用程序的活动)。当点击列表中的某个项目时,我想获得它的信息。它主要完成,但我在尝试检索项目数据时遇到错误。

这就是我正在做的事情:

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)

我做错了什么?

1 个答案:

答案 0 :(得分:1)

另外,在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

p.s。,因为我看到您使用了ListActivity。在这种情况下,您也可以在getListView().getAdapter() getItem(int position)中致电onListItemClick。因此不需要静态成员。查看ListActivities API。