【问题标题】:How to refresh recyclerview adapter from other recyclerview adapter in same fragment如何从同一片段中的其他 recyclerview 适配器刷新 recyclerview 适配器
【发布时间】:2020-07-29 09:25:44
【问题描述】:

我在一个片段(抽屉活动)中有 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() 它一定很简单,但我不知道该怎么做

【问题讨论】:

  • 你在哪里创建 recyclerview 适配器?
  • @svi.data 与该片段相同的目录

标签: java android xml api


【解决方案1】:

解决问题的简单方法是:

  1. 保留两个适配器(productsAdapter 和 categoryAdapter) 共享首选项管理器。
  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 方法。

【讨论】:

    【解决方案2】:

    所以这是适配器必须与片段通信的情况。

    我们将为此使用一个接口:

    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
    
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多