2016-04-06 10 views
0

私はRecyclerViewでCheckedTextViewを使用しています。私はxmlでcheckedTextViewを1つだけ定義しました。そして私はサーバからの動的なデータでrecylerViewを膨らませます。今私は選択されたCheckedTextViewだけ他のunchecked中にチェックしたいと思います。 CheckedTextViewはチェックする必要がありますが、チェックされている場合はチェックされないままにしておきます。チェックはどのようにチェックされていますかチェックしてください他のチェックを外した状態でrecyclerView内のテキストビュー

ここに書いたコードです。

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); 
     } 
    } 
} 

これはどのように設定しているのですが、CheckedTextViewをすべてチェックしました。

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このようなitemViewをクリックリスナーにViewHolderコンストラクタ場所ANで、その後View.OnClickListenerを実装して作ってみましょう:あなたのViewHolderクラス@Override次のようなものとonClick方法で次に

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

また、現在実装しているrecyclerView.addOnItemTouchListenerも削除したいと考えています。 これは、リサイクラビュー全体ではなく、個々のビュー所有者にクリックリスナーを配置することです。これにより、特定のビュー・ホルダーが保持しているビューを操作できます。お役に立てれば!

+0

これは本当に私がしたい方法ではありませんが、これは本当に動作しません。まず、最初のタップでcheckTextviewを設定しません。 5回か6回タップするとチェックされ、他のテキストビューがクリックされたときに状態が変わることはありません。 –

+0

申し訳ありませんが、私はそれがあなたがしたいと思っていることをかなり理解していないと思います! – BonBon

+0

あなたはそれに応じてあなたの答えを編集できますか?私はこの回答を実装しました –

1

リサイクルビューはビューアを再利用するため、最初はすべての要素をfalseにしてカテゴリ[]のブール値配列(checkedArray[])を維持することをお勧めします。その後、あなたの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); 
     } 
     }); 
関連する問題