alibaba / vlayout

Project vlayout is a powerfull LayoutManager extension for RecyclerView, it provides a group of layouts for RecyclerView. Make it able to handle a complicate situation when grid, list and other layouts in the same recyclerview.
http://tangram.pingguohe.net/
MIT License
10.8k stars 1.79k forks source link

关于数据notifyDataSetChanged()界面无变化 #480

Closed LeiShuang closed 4 years ago

LeiShuang commented 4 years ago

mDelegateAdapter.add的子item的Adapter在数据改变情况下,去调用子item所对应的的Adapter的notifyDataSetChanged()无反应

LeiShuang commented 4 years ago

` public void getNotificationNewsSuccess(List lists) { int size = lists.size(); ... if (size == PAGE_SIZE){ homeNewsList.addAll(lists);//新闻的数据源添加新获取的数据 refreshNews();//更新新闻条目适配器的数据 mRefreshLayout.finishLoadMore(0,true,false);//完成加载更多,并标记 return; } ..... //刷新新闻数据 private boolean hasRefresh = false; private void refreshNews(){ if (hasRefresh) { mNewsAdapter.notifyDataSetChanged(); } else { mDelegateAdapter.addAdapter(8, initNewsAdapter()); } hasRefresh = true;//第一次直接添加新闻条目的adapter到DelegateAdapter上,之后每次刷新或者获取更多数据的操作,直接notifyDataSetChanged()来刷新界面 }

private BaseDelegateAdapter initNewsAdapter() { mNewsAdapter = new BaseDelegateAdapter(getActivity(), new LinearLayoutHelper(homeNewsList.size()), homeNewsList.size(), R.layout.item_home_news , Constant.VLayoutViewType.newsType) { @Override public void onBindViewHolder(@NonNull BaseViewHolder baseViewHolder, int position) { TextView tvNewsTitle = baseViewHolder.getView(R.id.tv_home_news_title); TextView tvNewsTime = baseViewHolder.getView(R.id.tv_home_news_time); tvNewsTitle.setText(homeNewsList.get(position).getXwbt()); tvNewsTime.setText(homeNewsList.get(position).getFbsj()); } }; return mNewsAdapter; } ` 现在在数据发生改变的情况下,mNewsAdapter并不能刷新。还有一个疑问,在进入界面时,本想调用DelegateAdapter.addAdapter(position,? extends DelegateAdapter)方法先把子item的adapter按照顺序添加到DelegateAdapter上,在数据获取成功之后去调用子item的对应adapter的notifydatasetchange()去刷新数据,但是部分adapter数据并没刷新,无奈只好在数据获取成功之后再addAdapter

LeiShuang commented 4 years ago

子item的Adapter基类去除掉之后,为每种item单独写一个对应的Adapter之后notifydatasetchanged没问题了。