Как передать экземпляр viewpager в Adapter с помощью класса Interface - PullRequest
0 голосов
/ 06 июля 2018

У меня есть активность, которая содержит много фрагментов. В каждом фрагменте у меня есть:

RecyclerView

Кнопка

Я могу перемещаться от фрагмента к другому с помощью viewpager.

Я получаю данные с сервера и передаю их адаптеру, чтобы заполнить окно восстановления, как показано ниже:

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 голосов
/ 06 июля 2018

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);
       }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...