【问题标题】:Error when clicking on listview Android (Java)单击listview Android(Java)时出错
【发布时间】:2021-01-23 18:14:28
【问题描述】:

每当我从 8 日开始单击列表视图中的项目时都会出错,之前的项目完美运行

详细信息:单击列表时,我使用单击的项目编号调用方法,该编号使用带有项目编号的列表视图的子项实例化一个 RelativeLayout,然后使用布局实例化一个 TextView 和一个 CheckBox *抱歉英语不好

列表查看代码:

@Override
public void onItemClick(AdapterView<?> p1, View p2, int p3, long p4)
{
    removerDaLista(p3);
} });

方法代码:

public void removerDaLista(int index){
    paraTachar.add(Integer.valueOf(index));
    RelativeLayout rl = (RelativeLayout)listView.getChildAt(index);
    TextView txt = (TextView) rl.findViewById(R.id.text);
    CheckBox cb = (CheckBox) rl.findViewById(R.id.cb);
        
    desativarLista(txt,cb);
}

错误:

FATAL EXCEPTION: main
Process: com.mycompany.myapp, PID: 611
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
    at com.mycompany.myapp.MainActivity.removerDaLista(MainActivity.java:88)
    at com.mycompany.myapp.MainActivity$100000001.onItemClick(MainActivity.java:71)
    at android.widget.AdapterView.performItemClick(AdapterView.java:310)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1164)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3132)
    at android.widget.AbsListView.onTouchUp(AbsListView.java:4059)
    at android.widget.AbsListView.onTouchEvent(AbsListView.java:3818)
    at android.view.View.dispatchTouchEvent(View.java:10023)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2626)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2307)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2632)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2321)
    at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:416)
    at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1808)
    at android.app.Activity.dispatchTouchEvent(Activity.java:3124)
    at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:378)
    at android.view.View.dispatchPointerEvent(View.java:10243)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4438)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4306)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3906)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3872)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3999)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3880)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4056)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3906)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3872)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3880)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3853)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6247)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6221)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6182)
    at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6350)
    at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:323)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:6152)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:890)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:780)

【问题讨论】:

    标签: java android nullpointerexception


    【解决方案1】:

    原因很可能是找不到视图。在您的情况下,它是视图 R.id.textR.id.cb 或两者兼而有之。确保 TextViewCheckBox 存在于布局中,或者确保您使用了正确的 id

    编辑: 也可能是index的问题,view那个index找不到。在您的代码中:

    rl = (RelativeLayout)listView.getChildAt(index);
    

    替换为:

     rl = (RelativeLayout)listView.getChildAt(index-1);
    

    也许索引从1而不是0开始。

    【讨论】:

    • 它们一直存在并一直工作到第八个,但我一定是错了,你会怎么做那个代码?
    • 它没有用,我一直在崩溃
    【解决方案2】:

    我设法修复了错误,所以我读到了 list.getChildAt() 是基于列表视图而不是适配器数据。 我只需要这样做

    ...listView.getChildAt(index - listView.getFirstVisiblePosition())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 2011-10-28
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多