如何使用Interface类

时间:2018-07-06 08:53:32

标签: java android interface

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

RecyclerView

按钮

我可以使用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实例或其他视图会创建循环依赖关系,并且因此内存泄漏。

1 个答案:

答案 0 :(得分:1)

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