java - 删除 ListView 项时出现空指针

标签 java android arraylist adapter expandablelistview

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

    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 指出错误来 self 的可扩展列表适配器中的此方法,但我不知道如何防止此方法返回 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 在方法开头不为 null。

最佳答案

解决方案非常简单,但我觉得我应该保留这个问题,这样其他人就不必像我调试那样浪费那么多时间。

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

public void loadActiveList(String variable){

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

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

关于java - 删除 ListView 项时出现空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987345/

相关文章:

java - 如何处理 Java HTTP Server 上不匹配/不需要的或有效的请求?

android - 使用 OpenCV 库进行 Android 物体识别

java - 无法以编程方式隐藏弧形菜单中的 fab 按钮。尝试了 upload.hide();无法弄清楚如何隐藏 fab 按钮

java - Clojure 和 HBase : Iterate Lazily over a Scan

java - 如何使用多个排序条件对 ArrayList 进行排序?

java - GWT DataGrid 未显示

java - 使用 Arraylist.get 方法时遇到问题,显示 "Incompatible operand types Object and int"

Android ListView 项目以编程方式突出显示

java - 在 Java 中比较多个数组中相应值的更好方法

Java - 将 ArrayList 的元素存储到单独的 block 中