适配器不工作

时间:2013-07-04 11:16:38

标签: android adapter

在我的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();
}

2 个答案:

答案 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()方法来存储值而不是引用。