在我的OncreateView()
设置首次加载页面时正在运行的适配器。当我转到另一个页面进行更改然后返回到此片段时,它无法正常工作adapter.notifyDatasetchanged()
。
@Override
public void onStart() {
super.onStart();
groupItem.clear();
childItem.clear();
List<String> child_Category;child_Category=new ArrayList<String>();
groupItem = obj_Listdatabase.fetchcategory();
childItem.clear();
ListIterator<String> iterator = groupItem
.listIterator();
while (iterator.hasNext()) {
String categoryname = iterator.next();
child_Category = new ArrayList<String>();
child_Category = obj_Listdatabase
.fetchchildlist(categoryname);
childItem.add(child_Category);
}
adapter.notifyDataSetChanged();
}
答案 0 :(得分:0)
你应该更干净地缩进你的代码,不要使用几个&#34;;&#34;例如,在同一行。 你绝对可以使用BaseExpandableListAdapter,issu就在其他地方..
你还应该注意到onCreate视图更适合&#34;创建视图&#34;所以适配器的东西应该在其他地方,比如onViewCreated,或者你需要的onActivityCreated(它只是一些建议)
我假设您的适配器位于片段中,因为您使用 GetActivity(),并且在适配器的构造函数中,您传递了对活动(上下文),组列表和子列表的引用。好的
我们假设您正在使用片段onStart。来自官方文件:
Called when the Fragment is visible to the user. This is generally tied to Activity.onStart of the containing Activity's lifecycle.
所以通常这个方法在onViewCreate,onViewCreated等之后调用,至少在你第一次运行代码时。所以这没关系
您是否尝试使用 adapter.notifyDataSetInvalidate(),然后执行 adapter.notidyDataSetChanged ?
最后一件事,因为您实际上是由构造函数将数据传递给适配器,当您更新列表时适配器如何才能知道更改?您的列表是全局的(静态)吗?
如果没有,在执行adapter.notifyDataSetChanged()之前,你应该使用一些setter将列表(group和child)传递给适配器。
祝你好运答案 1 :(得分:0)
Hai我得到了这个输出:
groupItem.addAll(obj_Listdatabase.fetchcategory());
而不是这个
//groupItem = obj_Listdatabase.fetchcategory();
因为我更改了该适配器的赋值语句(=)中的引用。所以我使用addAll()方法来存储值而不是引用。