[英]How do I update the recyclerview list in the fragment? (notifyDataSetChanged not working)
我的項目中有一個片段,當您單擊那里的 recyclerview 時,它會轉到該項目(詳細活動打開)。 詳細活動中有一個like按鈕,當你按下它時,在上層; 片段中的 recyclerview 需要更新,但我不能。
我的代碼:(片段)
RecyclerView savedRecyclerView;
SQLiteHandler sqLiteHandler;
SavedAdapter savedAdapter;
List<SavedModel> itemModels = new ArrayList<>();
@SuppressLint("StaticFieldLeak")
public static SavedFragment instance;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_saved, container, false);
instance = this;
savedRecyclerView = view.findViewById(R.id.savedRecyclerView);
sqLiteHandler = new SQLiteHandler(getActivity());
itemModels = sqLiteHandler.getSaved();
LinearLayoutManager mainLayoutManager = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false);
savedRecyclerView.setLayoutManager(mainLayoutManager);
savedAdapter = new SavedAdapter(getContext(), itemModels, "diyet");
savedRecyclerView.setAdapter(savedAdapter);
savedAdapter.notifyDataSetChanged();
return view;
}
public static SavedFragment getInstance() {
return instance;
}
public void refreshFragment() {
Log.e("TAG_FRAGMENT", "refresh");
itemModels.clear();
itemModels = sqLiteHandler.getSaved();
if (itemModels.isEmpty()) {
empty_animation.setVisibility(View.VISIBLE);
} else {
LinearLayoutManager mainLayoutManager = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false);
savedRecyclerView.setLayoutManager(mainLayoutManager);
savedAdapter = new SavedAdapter(getContext(), itemModels, "diyet");
savedRecyclerView.setAdapter(savedAdapter);
savedAdapter.notifyDataSetChanged();
}
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
getActivity().getSupportFragmentManager().beginTransaction().detach(this).attach(this).commit();
}
我試試這個但不工作
@Override
public void onResume() {
savedAdapter.notifyDataSetChanged();
super.onResume();
}
詳細活動 UnFav 按鈕單擊
if (SavedFragment.getInstance()!=null){
SavedFragment.getInstance().refreshFragment();
Log.e("TAG_FRAGMENT","savednotnull");
}
在你的onResume()
中使用它:
savedAdapter.notifyItemRangeChanged(0, itemModels.size());
像這樣:
@Override
public void onResume() {
super.onResume();
savedAdapter.notifyItemRangeChanged(0, itemModels.size());
}
僅更改在 itemModels 列表中單擊的那個項目,而不是:
savedAdapter.notifyDataSetChanged();
public void refreshFragment() {
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
}
notifyDataSetChanged必須在 UI 線程上運行,如果不是,你應該強制它。 在更改數據后要更新recyclerview的地方試試這個,當其他人不這樣做時,它對我有用。
((Activity) getContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
yourAdapter.notifyDataSetChanged();
}
});
如果它不起作用,也許你應該檢查你的數據、適配器和recyclerview。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.