【问题标题】:How to pass viewpager instance to Adapter using an Interface class如何使用接口类将 viewpager 实例传递给适配器
【发布时间】:2018-07-06 08:53:32
【问题描述】:

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

回收站视图

按钮

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

【问题讨论】:

    标签: java android interface


    【解决方案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);
         }
      

    【讨论】:

    • 谢谢@hassan :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多