适配器无法工作。

4

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

适配器的notifyDataSetChanged()方法不起作用,还是没有被调用?你能否在那里设置一个断点/日志,看看它是否被调用了? - dors
当我使用以下代码添加适配器时:adapter = new CategoryExpandableAdapter(getActivity(), groupItem, childItem); expandlistview.setAdapter(adapter); 而不是使用 adapter.notifyDataSetChanged(); 时,它可以正常工作... - Satheesh
不要调用BaseExpandableListAdapter。 - Satheesh
当我从另一个片段返回到此片段时,适配器没有刷新并且提供了空的可扩展列表视图。 - Satheesh
2个回答

0

你应该更加清晰地缩进你的代码,例如不要在同一行使用多个";"。 而且你肯定可以使用BaseExpandableListAdapter,问题可能出在其他地方。

你还应该注意到onCreateView更适合“创建视图”,所以所有的适配器相关内容应该放在其他地方,比如onViewCreated或onActivityCreated中(这只是一些建议)。


我猜你的适配器在一个Fragment中,因为你使用了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将列表(组和子项)传递给适配器。

祝好运


0
嗨,我得到了这个的输出:
    groupItem.addAll(obj_Listdatabase.fetchcategory());

不要这样做

   //groupItem = obj_Listdatabase.fetchcategory();

因为我在赋值语句(=)中更改了适配器的引用。所以我使用addAll()方法仅存储值,而不是引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接