簡體   English   中英

如何從同一片段中的其他 recyclerview 適配器刷新 recyclerview 適配器

[英]How to refresh recyclerview adapter from other recyclerview adapter in same fragment

我在一個片段(抽屜活動)中有 Recyclerview 類別和 Recyclerview 產品。 當我單擊類別中的某些內容時,我想重新加載/刷新 recyclerview 產品。 在此處輸入圖像描述

回收商查看類別

...
     @Override
    public transaksibaru_kategori_viewholder onCreateViewHolder(final ViewGroup parent, int viewType) {
        View view;
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv_item_transaksibaru_kategori, parent, false);
        final transaksibaru_kategori_viewholder vHolder = new transaksibaru_kategori_viewholder(view);
        sharedPrefManager = new SharedPrefManager(parent.getContext());
        Activity_transaksibaru.KEY_ACT = "run";
        vHolder.linearlayout_kategori.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String id_kategori = mItem_kategori.get(vHolder.getAdapterPosition()).getId();
                sharedPrefManager.savetransaksibarustring(SharedPrefManager.sp_idkategori,id_kategori);
                Toast.makeText(parent.getContext(), "ID KATEGORI = " + id_kategori,Toast.LENGTH_LONG).show();

            }
        });
        return vHolder;
    }
...

分段

@Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...

        statusview = sharedPrefManager.getSp_viewmode();
        statushitung = Integer.valueOf(statusview);
        id_kategori = sharedPrefManager.getSp_idkategori();
        //id_kategori = "10";
        if (statushitung%2 == 0){
            call_itembarang_gridview();
            i=1;
        }else {
            call_itembarang();
            i=2;
        }
...

我只需要從 RV_category(RV2) 運行 call_itembarang() 它一定很簡單,但我不知道該怎么做

解決您的問題的簡單方法是:

  1. 將兩個適配器(productsAdapter 和 categoryAdapter)保存在 SharedPrefManager 中。
  2. 將 loadCategory(int categoryId) 方法添加到 SharedPrefManager。

     public void loadCategory(int categoryId) { // you need to create getProductsOfCategory method in SharedPrefManager. List<Product> products = getProductsOfCategory(categoryId); // you need to create setProductList method in productsAdapter productsAdapter.setProductList(products); productsAdapter.notifyDatasetChanged(); }
  3. 在類別的 RecyclerView 中,在 onCreateViewHolder 方法中更改您的 onClickListener 以便它使用 loadCategory 方法。

所以這是適配器必須與片段通信的情況。

我們將為此使用一個接口:

1)在新文件中創建接口

public interface onCategoryClickedListener{

void onCategoryClicked(String categoryId);

}

2) 適配器

public class YourAdapter extends ......{

private onCategoryClickedListener listener;


//method to set listener
public void setOnCategoryClickedListener(onCategoryClickedListener listener){
this.listener=listener;
}

//oncreateviewholder

@Override
public transaksibaru_kategori_viewholder onCreateViewHolder(final ViewGroup parent, int viewType) {

......

vHolder.linearlayout_kategori.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

//your category id
final String id_kategori = mItem_kategori.get(vHolder.getAdapterPosition()).getId();

//send the category id back to your fragment
listner.onCategoryClicked(id_kategori);

            }
        });


}

3)現在讓你的片段實現這個接口

public class YourFragment extends Fragment implements onCategoryClickedListener{

private RecyclerView mRecyclerView;
private YourAdapter adapter;
.....
.....
.....

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

.......

//here you pass the listener to your adapter

adapter.setOnCategoryClickedListener(this);

........
return(view);
}

@Override
public void onCategoryClicked(String categoryId){

//this will be called every time an item in your category is clicked

//call the method from here and whatever if statements you want

}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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