代码之家  ›  专栏  ›  技术社区  ›  The Tokenizer

删除列表视图项时出现空指针

  •  1
  • The Tokenizer  · 技术社区  · 12 年前

    当试图从我的 ListView 。我认为这是因为我的ListView正在尝试获取不存在的子视图,但我不知道如何防止这种情况,因为我的可扩展ListView需要子视图。

        java.lang.NullPointerException
                at com.hello.ExpandableListAdapter.getChildrenCount(ExpandableListAdapter.java:89)
                at android.widget.ExpandableListConnector.refreshExpGroupMetadataList(ExpandableListConnector.java:563)
                at android.widget.ExpandableListConnector.access$000(ExpandableListConnector.java:50)
                at android.widget.ExpandableListConnector$MyDataSetObserver.onChanged(ExpandableListConnector.java:857)
                at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
                at android.widget.BaseExpandableListAdapter.notifyDataSetChanged(BaseExpandableListAdapter.java:56)
                at com.hello.MainActivity.InactiveAlarmSorter3000(MainActivity.java:301)
                at com.hello.MainActivity.doPositiveClick(MainActivity.java:315)
                at com.hello.ArmAlarmFragment$2.onClick(ArmAlarmFragment.java:32)
    

    Logcat声明错误来自我的可扩展列表适配器中的此方法,但我不知道如何防止此方法返回null。

    @Override
    public int getChildrenCount(int groupPosition) {
        String test = listDataChild.get(listDataHeader.get(groupPosition)) + "";
        Log.d("Debugd", groupPosition + "");
        Log.d("Debugd", listDataChild + "hi");
        Log.d("Debugd", listDataHeader + "bye");
        Log.d("Debugd", test);
    
        return this.listDataChild.get(listDataHeader.get(groupPosition)).size();
    
    }
    

    调用方法的位置。

       public void StuffSorter3000(String header) {
    
            Log.d("testingthis", header);
    
            if (header.equals("SomeStuff")) {
                loadActiveList(header);
            }
            if (header.equals("OtherStuff")) {
                loadActiveList(header);
            }
    
            ActiveList.notifyDataSetChanged();
            listAdapter.notifyDataSetChanged();
        }
    

    执行添加/删除的方法

     public void loadActiveList(String variable) {
    
            listDataHeaderActive.add(variable);
            listDataHeaderInactive.remove(variable);
        }
    

    添加变量效果很好,项目显示在ArrayList中,但是从其他ArrayList删除变量会崩溃。

    **变量 header 方法开头不为空。

    1 回复  |  直到 12 年前
        1
  •  1
  •   The Tokenizer    12 年前

    解决方案很简单,但我觉得我应该把这个问题抛在一边,这样其他人就不用像我调试那样浪费那么多时间了。

    在删除父项之前,我必须确保已折叠附加的childView。 我还使用 notifyDataSetInvalidated() 而不是使用 notifyDataSetChanged() 在我的ExpandableListAdapter上。问题似乎解决了。

    public void loadActiveList(String variable){
    
         Inactive.collapseGroup(AlarmPosition);
         listDataHeaderInactive.remove(variable);
         listAdapter.notifyDataSetInvalidate();
    
    listDataHeaderActive.add(variable)
    ActiveList.notifyDataSetChanged();
    }