2015-12-08 2 views
1

У меня есть 2 ViewHolders: по умолчанию и расширен (с некоторым текстом).Как получить текущую строку itemView?

Когда пользователь нажимает на строку, он должен переключить свой зритель на расширенный. В моем коде ниже, когда я нажимаю на itemView, каждый элемент itemView меняет его, а не только целевую строку. Как справиться с этим? Благодаря

private boolean isClicked; 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    int viewHoldertype = getItemViewType(position); 

    Item item = items.get(position); 
    holder.title.setText(item.getTitle()); 

    switch (viewHoldertype) { 
     case TYPE_ARTICLE: 

      holder.itemView.setOnClickListener((View v) -> { 
       toggleItem(); 
      }); 
      break; 
     case TYPE_EXPANDED_ARTICLE: 
      final ExpandedViewHolder expandedItemHolder = (ExpandedViewHolder) holder; 
      expandedItemHolder.description.setText(item.getDescription()); 
      expandedItemHolder.setIsRecyclable(false); 
      expandedItemHolder.itemView.setOnClickListener((View v) -> { 
       switch(); 
      }); 
      break; 
    } 
} 

void switch() { 
    isClicked = !isClicked; 
    notifyDataSetChanged(); 
} 

    class ViewHolder extends RecyclerView.ViewHolder { 

    @Bind(R.id.image) 
    ImageView image; 
    @Bind(R.id.title) 
    TextView title; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     itemView.setTag(this); 
     ButterKnife.bind(this, itemView); 
    } 
} 

class ExpandedViewHolder extends ViewHolder { 

    @Bind(R.id.description) 
    TextView description; 

    public ExpandedViewHolder(View itemView) { 
     super(itemView); 
    } 
} 

ответ

0

Либо сохранить положение вашего зрения при установке OnClickListener в onBindViewHolder или получить текущую позицию через RecyclerView.getChildPosition (вид) в вашем OnClick вызова. Затем вы можете изменить состояние своих элементов (развернуть его) и заставить Recyclerview перерисовать выбранный элемент.

@Override 
public void onClick(final View view) { 
    int itemPosition = mRecyclerView.getChildPosition(view); 
    ... 
} 
Смежные вопросы