Android ListView getCheckedItem为视图外的项返回null

时间:2014-03-29 17:32:26

标签: android listview nullpointerexception

我有一个ListView,它在视图中一次最多显示四个项目。如果列表中有更多项目,那么它会自动转换为可滚动列表。

现在我将该列表的选择模式更改为单个: lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

因此用户可以选择单个项目。选择项目后,用户需要单击按钮。

现在当列表最多4个项目时,一切正常。随着列表中添加更多项目,我在此行有一个NullPointerException错误:

String s = ((TextView) lv.getChildAt(p)).getText().toString();

这是按钮的OnClick方法的完整代码:

@Override
    public void onClick(View v) {
        int p =  lv.getCheckedItemPosition();
        if(p>=0){
            String s = ((TextView) lv.getChildAt(p)).getText().toString();
             }
      }

完整堆栈跟踪:

03-29 23:00:07.424: E/AndroidRuntime(334): FATAL EXCEPTION: main
03-29 23:00:07.424: E/AndroidRuntime(334): java.lang.NullPointerException
03-29 23:00:07.424: E/AndroidRuntime(334):  at com.username.appname.activityname.onClick(ActivityName.java:48)
03-29 23:00:07.424: E/AndroidRuntime(334):  at android.view.View.performClick(View.java:2485)
03-29 23:00:07.424: E/AndroidRuntime(334):  at android.view.View$PerformClick.run(View.java:9080)
03-29 23:00:07.424: E/AndroidRuntime(334):  at android.os.Handler.handleCallback(Handler.java:587)
03-29 23:00:07.424: E/AndroidRuntime(334):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-29 23:00:07.424: E/AndroidRuntime(334):  at android.os.Looper.loop(Looper.java:123)
03-29 23:00:07.424: E/AndroidRuntime(334):  at android.app.ActivityThread.main(ActivityThread.java:3683)
03-29 23:00:07.424: E/AndroidRuntime(334):  at java.lang.reflect.Method.invokeNative(Native Method)
03-29 23:00:07.424: E/AndroidRuntime(334):  at java.lang.reflect.Method.invoke(Method.java:507)
03-29 23:00:07.424: E/AndroidRuntime(334):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-29 23:00:07.424: E/AndroidRuntime(334):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-29 23:00:07.424: E/AndroidRuntime(334):  at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

为什么不为ListView创建onitemclicklistener,以及单击该项目时。将该项目存储为String,然后在按下按钮时调用该项目?