首页 > 解决方案 > 如何使用接口类将 viewpager 实例传递给适配器

问题描述

我有一个包含许多片段的活动。在每个片段中,我都有一个:

回收站视图

按钮

我可以使用 viewpager 从片段移动到另一个片段。

我正在从服务器获取数据并将它们传递给适配器以填充 recyclerview,如下所示:

adapter = new BrandsAdapter(getContext(), postArray,btValider,viewPager);

其中 postArray 是字符串列表。

BrandsAdapter.class:

 public BrandsAdapter(Context context, ArrayList<Brand> filteredItems,Button btValider,ViewPager viewPager) {
        this.context = context;
        this.filteredItems = filteredItems;
        this.btValider=btValider;
        this.viewPager=viewPager;

    }

onBindViewHolder

btValider.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                 .....
                 // Get user selected brands and move to another fragment
                    viewPager.setCurrentItem(3);

                }
            });

我如何创建一个接口,我可以在其中添加 mybutton 和 viewpager 实例,这样我就不会直接通过 BrandsAdapter 传递它们,因为从内存的角度来看,通过构造函数传递 viewpager 实例或其他视图可以创建循环依赖关系,从而导致内存泄漏.

标签: javaandroidinterface

解决方案


1.创建接口,

public interface BtValiderClickListener {
void btValiderClick(int positon);
}
  1. 实现这个接口
  2. 将接口的实例传递给适配器,

    adapter = new BrandsAdapter(getContext(), postArray,btValider,this);
    
  3. 在适配器中,

    private BtValiderClickListener btValiderClickListener;
    
  4. 然后在您的适配器构造函数中,

    public BrandsAdapter(Context context, ArrayList<Brand> filteredItems,Button btValider,BtValiderClickListener btValiderClickListener) {
    this.context = context;
    this.filteredItems = filteredItems;
    this.btValider=btValider;
    this.btValiderClickListener=btValiderClickListener;
    }
    
  5. 在 onBindViewHolder 中,

     btValider.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                btValiderClickListener.btValiderClick(3)
            }
        });
    
  6. 覆盖实现接口的方法,

       @Override
       public void btValiderClick(int positon) {
        viewPager.setCurrentItem(positon);
       }
    

推荐阅读