尝试从 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/