尝试从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
在方法开头不为空。
答案 0 :(得分:0)
解决方案非常简单,但我觉得我应该放弃这个问题,所以没有其他人可以浪费尽可能多的时间来调试。
在删除父项之前,我必须确保附加的childView已折叠。
我还使用notifyDataSetInvalidated()
使我的数据集无效,而不是在我的ExpandableListAdapter上使用notifyDataSetChanged()
。问题似乎已经解决了。
public void loadActiveList(String variable){
Inactive.collapseGroup(AlarmPosition);
listDataHeaderInactive.remove(variable);
listAdapter.notifyDataSetInvalidate();
listDataHeaderActive.add(variable)
ActiveList.notifyDataSetChanged();
}