簡體   English   中英

如何更新片段中的 recyclerview 列表? (notifyDataSetChanged 不起作用)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM