删除listview项时会出现空指针

时间:2014-07-28 01:24:13

标签: java android arraylist adapter expandablelistview

尝试从ListView中删除项目时,我收到空指针异常。我相信这是因为我的ListView试图获取不存在的子视图,但我不知道如何防止这种情况,因为我的expandableListView需要子视图。

    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声明错误是来自我的expandablelist适配器中的此方法,但我不知道如何阻止此方法返回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 个答案:

答案 0 :(得分:0)

解决方案非常简单,但我觉得我应该放弃这个问题,所以没有其他人可以浪费尽可能多的时间来调试。

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

public void loadActiveList(String variable){

     Inactive.collapseGroup(AlarmPosition);
     listDataHeaderInactive.remove(variable);
     listAdapter.notifyDataSetInvalidate();

listDataHeaderActive.add(variable)
ActiveList.notifyDataSetChanged();
}