2016-04-06 5 views
0

Я использую CheckedTextView в RecyclerView. Я определил только один checkTextView в xml. И я раздуваю recylerView динамическими данными с сервера. Теперь я хочу проверить только выбранный CheckedTextView, а другой - не проверенный. Следует проверять только один CheckedTextView, в то время как другие должны оставаться непроверенными, когда один из них проверен.Как проверить speceded CheckedTextView внутри recyclerView while other Unchecked

Вот код, который я написал.

public class CategoriesAdapter extends RecyclerView.Adapter<CategoriesAdapter.ViewHolder> { 
    CategoriesDTO categoriesDTO; 
    String categories[]; 

    public CategoriesAdapter(CategoriesDTO categoriesDTO){ 
     this.categoriesDTO=categoriesDTO; 
    } 
    public CategoriesAdapter(String[] categories){ 
     this.categories=categories; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.categories_layout, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.category.setText(categories[position]); 
    } 


    @Override 
    public int getItemCount() { 
     return categories.length; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder{ 

     public CheckedTextView category; 
     public ViewHolder(View itemView) { 
      super(itemView); 
      category=(CheckedTextView)itemView.findViewById(R.id.category); 
     } 
    } 
} 

Вот как я устанавливаю его, но он проверил все проверочный файл.

recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { 
      @Override 
      public void onItemClick(View view, int position) { 
       CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.category); 
       checkedTextView.setChecked(true); 
       Toast.makeText(getContext(), "" + categories[position], Toast.LENGTH_SHORT).show(); 
       String url = Constants.URL_BASE_CATEGORY + categories[position]; 
       new MyAsyncTask().execute(url); 
      } 
     })); 

как это сделать?

ответ

0

Попробуйте сделать ваш ViewHolder реализовать View.OnClickListener, а затем в ViewHolder конструктор место ОНом щелчка слушателя на itemView, как это:

public ViewHolder(View itemView) { 
     super(itemView); 
     category=(CheckedTextView)itemView.findViewById(R.id.category); 
     itemView.setOnClickListener(this) 
    } 

Затем в ViewHolder классе @OverrideonClick метод с чем-то вроде этого:

@Override 
public void onClick(View v){ 
    ((CheckedTextView) v).toggle(); 
} 

Вы также хотели бы избавиться от recyclerView.addOnItemTouchListener, который вы в настоящее время реализовали. То, что это делает, - это размещение слушателя кликов на каждом отдельном держателе вида, а не на всем просмотре ресайклеров. Это позволяет вам манипулировать видом, который удерживает конкретный держатель. Надеюсь это поможет!

+0

Спасибо за рассмотрение ответа, но это не работает так, как я хочу. Сначала он не устанавливает checkTextview при первом касании. Когда я нажимаю 5 или 6 раз, тогда он проверяется, и он не изменяет его состояние при нажатии другого текстового комментария. –

+0

Да, извините, я, наверное, не совсем понял, что вы хотели сделать! – BonBon

+0

Вы можете отредактировать свой ответ в соответствии с ним? Я внедрил этот ответ –

1

Это связано с тем, что recyclerview повторно использует зрителей, поэтому лучше всего поддерживать булевский массив (checkedArray[]) с размером категорий [] со всеми элементами false изначально. Затем избавьтесь от своего onItemTouchListener. Так что в основном в вашем onbindviewholder просто положите это

 holder.category.setChecked(checkedArray[position]); 

     holder.date.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      checkedArray[position] = !checkedArray[position]; 
      notifyItemChanged(position); 
     } 
     }); 

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

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