如何从另一个类通知RecyclerView的DataSetChanged?

我将应用程序的所有API调用方法组织在一个单独的类中。因此,当我从服务器获取响应时,将其插入到Model类中。但是问题是,我无法notifyDataSetChanged()(从解析JSON的类中)我解析所有的JSON。因此,我的适配器的getItemCount()值始终为0。结果是recyclerView永远没有数据。


这是我的 Fragment.class


RecyclerView recyclerView;

LatestAdapter latestAdapter;

List<PostItem> latestItems;


@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 


     // Inflate the layout for this fragment

    View view =  inflater.inflate(R.layout.fragment_latest, container, false);


    // Initilize the RecyclerView and Adapter  

    recyclerView =(RecyclerView)view.findViewById(R.id.recycler_view);

    latestAdapter = new LatestAdapter(getContext(),latestItems);

    final LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());

    recyclerView.setLayoutManager(mLayoutManager);

    recyclerView.setAdapter(latestAdapter);


    fetchIntialPost();


private void fetchIntialPost() {

    //here I make API call in another class,which is all API calling method in that class 

    ApiHelper apiHelper = new ApiHelper();

    apiHelper.fetchIntialPost();

}

问题:


我现在的问题是,我无法访问LatestAdapterFragment.class中的对象。因此,我notifyDataSetChanged()在解析响应Json后无法调用。


我尝试了什么


我试图在ItemHelper类中创建如下所示的方法:


public List<tItem> getList() {

    return items;

}

在LatestAdapter中,我还创建了这样的方法:


public void setItem(List<Item> item) {

  this.latestItems = item;

  notifyDataSetChanged();

}

然后在Fragment.class中,我像这样访问它


ItemHelper itemHelper = new ItemHelper();

latestItems = itemHelper.getList();

latestAdapter.setPosts(latestItems);

与我上面试过了,getItemCount()的LatestAdapter仍为0,API调用之后。


所以有人请给我一个解决这个问题的提示


,或者是一种更好的解决方案,用于将1类中的所有API调用方法组织起来,将1类中的所有JSON解析操作组织在一起notifyDataSetChanged()。适配器也可以同时使用。


隔江千里
浏览 174回答 3
3回答

青春有我

更改您的体系结构是不正确的。否则,如果您不想更改。可以尝试这种方式:public void setDataList(List<RealmSave_Data> dataList) {&nbsp; &nbsp; &nbsp; &nbsp; this.dataList = dataList;&nbsp; &nbsp; }适配器中的此方法并从您要调用的位置调用该方法,还将此列表传递给构造函数,因为它将在getCount()中初始化,它将返回该值。

芜湖不芜

每个人都可以使用回调。您也可以使用RxAndroid通过矿石控制来完成这项工作。如果您发现Rx异常或难以理解,则可以使用事件总线(实际上,事件总线在某种程度上被称为反模式,但仍然可以使用它们)。事件总线的一个很好的实现是RxBus,您也可以使用SimpleEventBus,它是另一种基于Rx的事件总线,它可以生成有意义的方法,这些方法可能很容易理解。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java