android - 如何更新 ViewPager 适配器/FragmentStateAdapter?
问题描述
如何更新我发送到 Fragment 以显示在 RecycleReview 中的数据?并更改 UI
当我使用 swipeRefreshlayout 时,数据将来自 Room 并发送到 Adapter 和 notifyDataSetChange
但 notifyDataSetChange 不起作用,我的适配器未更新
这是我显示 viewPager 的主要片段
if (fragmentHomeBinding.viewPager2.getAdapter() == null){
Log.e("TAG", "setupTablayoutTapGainLose: tab setAdapter");
topGainLosersAdapter = new TopGainLosersAdapter(this,allMarketModel);
fragmentHomeBinding.viewPager2.setAdapter(topGainLosersAdapter);
}else {
Log.e("TAG", "setupTablayoutTapGainLose: tab notify");
topGainLosersAdapter = (TopGainLosersAdapter) fragmentHomeBinding.viewPager2.getAdapter();
topGainLosersAdapter.updateData(allMarketModel);
}
这是我的 viewPager 适配器
public class TopGainLosersAdapter extends FragmentStateAdapter {
AllMarketModel allMarketModel;
public TopGainLosersAdapter(@NonNull @NotNull Fragment fragment, AllMarketModel allMarketModel) {
super(fragment);
this.allMarketModel = allMarketModel;
}
@NonNull
@NotNull
@Override
public Fragment createFragment(int position) {
// Return a NEW fragment instance in createFragment(int)
Fragment fragment = new TopGainLoseFrag();
Bundle args = new Bundle();
// Our object is just an integer :-P
args.putInt("pos", position);
args.putParcelable("data",allMarketModel);
fragment.setArguments(args);
return fragment;
}
@Override
public int getItemCount() {
return 2;
}
public void updateData(AllMarketModel newdata) {
allMarketModel = newdata;
notifyDataSetChanged();
}
}
这是我展示 recyclerView 的片段
public class TopGainLoseFrag extends Fragment {
FragmentTopGainLoseBinding fragmentTopGainLoseBinding;
GainLoseRvAdapter gainLoseRvAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentTopGainLoseBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_top_gain_lose,container,false);
// Inflate the layout for this fragment
return fragmentTopGainLoseBinding.getRoot();
}
@Override
public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//get data from viewPager2 adapter as bundle
Bundle args = getArguments();
int pos = args.getInt("pos");
AllMarketModel allMarketModel = args.getParcelable("data");
setupRecyclerView(allMarketModel.getData(),pos);
}
private void setupRecyclerView(List<DataItem> data, int pos) {
// sort Model list by change percent (lowest to highest)
Collections.sort(data, new Comparator<DataItem>() {
@Override
public int compare(DataItem o1, DataItem o2) {
return Integer.valueOf((int) o1.getQuote().getUSD().getPercentChange24h()).compareTo(Integer.valueOf((int) o2.getQuote().getUSD().getPercentChange24h()));
}
});
ArrayList<DataItem> dataItems = new ArrayList<>();
//if page was top Gainers
if (pos == 0){
//get 10 last Item
for (int i = 0;i < 10;i++){
dataItems.add(data.get(data.size() - 1 - i));
Log.e("TAG",data.get(data.size() - 1 - i).getSymbol() + " : " + data.get(data.size() - 1 - i).getQuote().getUSD().getPrice());
}
//if page was top Losers
}else if (pos == 1){
//get 10 first Item
for (int i = 0;i < 10;i++){
dataItems.add(data.get(i));
}
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
fragmentTopGainLoseBinding.gainLoseRv.setLayoutManager(linearLayoutManager);
if (fragmentTopGainLoseBinding.gainLoseRv.getAdapter() == null){
Log.e("TAG", "setupRecyclerView: setAdapter");
gainLoseRvAdapter = new GainLoseRvAdapter(dataItems);
fragmentTopGainLoseBinding.gainLoseRv.setAdapter(gainLoseRvAdapter);
}else {
Log.e("TAG", "setupRecyclerView: notify");
gainLoseRvAdapter = (GainLoseRvAdapter) fragmentTopGainLoseBinding.gainLoseRv.getAdapter();
gainLoseRvAdapter.updateData(dataItems);
}
}
}
解决方案
推荐阅读
- c# - 使用 Puppeteersharp 从页面下载图像
- powerbi - 将 Power BI 报表生成器连接到 postgresql
- jquery - 多个选择框,使用jquery获取选定的值
- arcore - ArCore:获取通常面向平面但沿相机方向旋转的对象的姿势
- assembly - 调试迭代斐波那契(手动从 C 转换为 RISC-V)
- python - 如何在列表中找到所有连接的子列表?Python
- docker - 从我的 docker 站点的 URL 中删除端口号
- react-native - 可重用代码中的问题以检查本机反应中的互联网可用性
- javascript - 如何找到具有相同href 的-tags,以便可以将类添加到具有相同-tag 的所有元素?
- node.js - heroku:package.json 中未指定节点版本