2016-09-09 5 views
0

Я хочу создать интерфейс между адаптером и держателем вида (этот держатель вида является внутренним классом другого адаптера), так что я могу обновить текстовый вид (число) , Как я могу это сделать?Как создать интерфейс между адаптером и зрителем

Подробно:

У меня есть две точки зрения рециркуляция (Основной список Ресайклер Просмотр и Sub Список Ресайклер Вид горизонтально расположенных, как показано на рисунке), один имеющий ряд (в качестве одного из его элемента) и другие, имеющие флажок (как его элемент).

enter image description here

У меня есть два адаптера FilterMainListAdapter и FilterSubListAdapter с держателями зрения FilterMainListViewHolder и FilterSubListViewHolder заполнения поля.

Когда флажки выделены в представлении Recycler Sub List, я хочу, чтобы соответствующий номер в представлении Recycler главного списка обновлялся.

Для этого я использую интерфейс и интерфейс.

public interface ChangeFilterMainNumber { 
void OnChangeFilterMainNumberListener(int totalCheckedNumber); 
} 

Я метод OnClick CheckBox в внутри FilterSubListViewHolder, и я пытаюсь отправить общие флажки проверяются число следующим образом.

changeFilterMainNumber.OnChangeFilterMainNumberListener(totalCheckedNumber); 

После этого, я реализация ChangeFilterMainNumber интерфейса внутри FilterMainListViewHolder

public class FilterMainListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, 
ChangeFilterMainNumber {...} 

Но Как я могу определить этот интерфейс внутри FilterSubListAdapter?

changeFilterMainNumber = ???; 

[Если это деятельность можно определить интерфейс, как этот changeFilterMainNumber = (ChangeFilterMainNumber) context внутри конструктора по умолчанию FilterSubListAdapter. Но как насчет держателя вида, который является внутренним классом другого адаптера?]

или есть лучший подход в поиске решения моей проблемы, кроме этого?

Update: Вы можете посмотреть на код здесь https://github.com/gSrikar/FilterScreen

ответ

0

Если я реализовать функцию, как вы хотите, я буду реализовывать так: (Это как шаблон Observer)

class Fragment/Activity implement OnChangeFilterMainNumberListener{ 
    FilterMainListAdapter mainAdapter; 
    FilterSubListAdapter subAdapter; 

    void oncreate() { 
     mainAdapter = new FilterMainListAdapter(this); 

    } 

    @Override 
    void OnChangeFilterMainNumberListener(int totalCheckedNumber) { 
      ..... 
     // Update data to sub list 
    } 
} 

class FilterMainListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ 

    public interface ChangeFilterMainNumber { 
      void OnChangeFilterMainNumberListener(int totalCheckedNumber); 
    } 
    ChangeFilterMainNumber listener; 
    FilterMainListAdapter(ChangeFilterMainNumber listener) { 
     this.listener = listener; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     item.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if(listener != null) { 
          listener.OnChangeFilterMainNumberListener(position) 
        } 
       } 
      }); 
    } 

} 

class FilterSubListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ 


} 
+0

Как получить ссылку на отдельный элемент в представлении Recycler главного списка перед его обновлением в 'OnChangeFilterMainNumberListener'? –

+0

Я видел ваш проект выше, я обычно делаю так: в файле 'filter_main_list_items.xml' вы помещаете id во внешний вид, например' linearCover'. И в 'FilterMainListAdapter', метод onBindViewHolder, вы делаете, как выше моего кода ' holder.linearCover.setOnClickListener (новый View.OnClickListener() { @Override общественного недействительными OnClick (View v) { если (слушатель! = NULL) { listener.OnChangeFilterMainNumberListener (позиция) } } }); ' –

 Смежные вопросы

  • Нет связанных вопросов^_^