2016-01-08 2 views
0

У меня есть мои разные держатели для просмотра в моем RecyclerView. В onCreateViewHolder я проверить viewType затем вернуть соответствующий viewHolderКак сделать один прослушиватель OnClick для разных viewHolders

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     this.mContext = parent.getContext(); 
     switch (viewType) 
     { 
      case ITEM_TYPE_HEADER_MAIN: 
       return new ViewHolderHeaderMain(MainHeaderView.newInstance(parent)); 

      case ITEM_VIEW_TYPE_DEFAULT: 
       return new ViewHolderDefualt(LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.card_list, parent, false), this.mContext); 

      case ITEM_VIEW_TYPE_CUSTOM: 
       return new ViewHolderCustom(LayoutInflater.from(parent.getContext()) 
         .inflate(R.layout.story_custom_layout, parent, false), this.mContext); 
      default: 
       throw new IllegalArgumentException(); 
     } 
    } 

и:

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     final StoryModel storyModel = this.mStories.get(position); 
     final StoryModel topStory = this.mTopStory; 
     if (holder instanceof ViewHolderHeaderMain) { 
      ViewHolderHeaderMain viewHolderHeaderMain = (ViewHolderHeaderMain) holder; 
      viewHolderHeaderMain.getMainHeaderView().setTopStories(this.mTopStory); 

     } else if (holder instanceof ViewHolderDefault){ 
      ViewHolderDefault viewHolderDefault = (ViewHolderDefault) holder; 
      viewHolderDefault.bindStory(this.mStories.get(position)); 
     } else if (holder instanceof ViewHolderCustom){ 
      ViewHolderCustom viewHolderCustom = (ViewHolderCustom) holder; 
      viewHolderCustom.bindStory(this.mStories.get(position)); 
     } 

Эти три viewHolders имеют одинаковые кликабельны взгляды как TextView для названия, описания и ImageButton для меню переполнения и ImageView для изображения , В этих viewHolders я делаю представления привязки данных (не в onBindViewHolder).

Теперь, когда дело доходит до onClickListeners, я должен реализовать View.onClickListener в каждом ViewHolder.

Мой вопрос: есть ли способ иметь один метод для этих интерактивных просмотров и назначать OnClickListener для каждого представления, а повторять то же самое в каждом viewHolder?

нравится:

private void setupClickableViews(final View view, final ViewHolderHeaderMain viewHolderheaderMain) { 
     viewHolderheaderMain.tvTitle.setOnClickListener(new View.OnClickListener() { 
    ... 

Где я должен определить три одинаковые методы для трех держателей просмотра.

Любые предложения?

ответ

0

Имейте все виды, наследуемые от общего абстрактного родителя, который имеет эти интерактивные представления, присоединяет прослушиватели кликов.

abstract class CommonViewHolder { 
    TextView title; 
    TextView desc; 
    ImageButton menuButton; 
    CommonViewHolder() { 
    title.setOnClickListener(...); 
    desc.setOnClickListener(...); 
    menuButton.setOnClickListener(...); 
    } 
} 

class ViewHolderMain extends CommonViewHolder { 
... 
} 

class ViewHolderDefault extends CommonViewHolder { 
... 
} 

class ViewHolderCustom extends CommonViewHolder { 
... 
} 
+0

Вы можете указать пример – Fshamri

+0

Код не заполнен, но вы должны получить идею –

0

Вы можете добавить android:onClick="activityOnClick" в XML-макет для всех соответствующих видов; то public void activityOnClick (View view) Метод обработки будет вызван.

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

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