为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

隔江千里 2021-04-08 14:15:21
我将应用程序的所有API调用方法组织在一个单独的类中。因此,当我从服务器获取响应时,将其插入到Model类中。但是问题是,我无法notifyDataSetChanged()(从解析JSON的类中)我解析所有的JSON。因此,我的适配器的getItemCount()值始终为0。结果是recyclerView永远没有数据。这是我的 Fragment.classRecyclerView recyclerView;LatestAdapter latestAdapter;List<PostItem> latestItems;@Overridepublic 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()。适配器也可以同时使用。
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

更改您的体系结构是不正确的。否则,如果您不想更改。可以尝试这种方式:


public void setDataList(List<RealmSave_Data> dataList) {

        this.dataList = dataList;

    }

适配器中的此方法并从您要调用的位置调用该方法,还将此列表传递给构造函数,因为它将在getCount()中初始化,它将返回该值。


查看完整回答
反对 回复 2021-04-18
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

每个人都可以使用回调。您也可以使用RxAndroid通过矿石控制来完成这项工作。

如果您发现Rx异常或难以理解,则可以使用事件总线(实际上,事件总线在某种程度上被称为反模式,但仍然可以使用它们)。

事件总线的一个很好的实现是RxBus,您也可以使用SimpleEventBus,它是另一种基于Rx的事件总线,它可以生成有意义的方法,这些方法可能很容易理解。


查看完整回答
反对 回复 2021-04-18
  • 3 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信