2016-12-26 26 views
0

Recyclerviewから値を選択しようとしていますが、選択した項目を強調表示しています。私はbgの色とテキストの色と画像を変更したい。今私は次のコードを使用しています。Recyclerビューで選択した項目を強調表示する方法

selector_row:onBindViewHolderにrecyclerviewで

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@android:color/darker_gray" android:state_pressed="false" android:state_selected="true" /> 
    <item android:drawable="@color/store_search_list_item_background"/> 
</selector> 

holder.itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (selectedItems.get(position, false)) { 
        selectedItems.delete(position); 
        holder.itemView.setSelected(false); 
       } 
       else { 
        selectedItems.put(position, true); 
        holder.itemView.setSelected(true); 
       } 
      } 
     }); 

今は選択された行を強調表示することができます。私の問題は です。1)別の行を選択すると、強調表示されます。私は1つの行だけを強調したいと思います。ユーザーが別の行を選択した場合、前の行は強調表示されません。

2)行をハイライト表示するときにテキストとイメージを変更する方法。

私はこの2つの問題を解決するために何か考えてください。

+1

は、強調表示された情報を保存する変数を設定します。 –

+0

操作後にnotifyItemChanged()を呼び出す –

+0

@Demo Mail .. notifyItemChanged()が私のシナリオでは動作しません.. – Vijay

答えて

2

新しいクリックであなたは、単に新しいクリックした位置を使用して変数の値を交換し、その後notifyItemChanged()を使用することを忘れないでください起こる時はいつでもそう変数に位置をクリックして保存することができます。今すぐあなたの選択した位置を確認し、項目の背景を変更するあなたのbindviewで非常に簡単です。

粗いex。 android:foreground="@drawable/xx_bg_sel"

onClick(){ 
    highlightedPosition = getLayoutPostion(); 
    notifyItemChanged(); 
    } 

    onBindView(int position){ 
    if(highlightedPosition == position){ 
    higlightedBackground(); 
    }else{ 
    normalBackground(); 
    } 
+0

それは働いています。リソースxmlで使用する他の方法はありますか? selector.xmlのように?? – Vijay

+0

この回答を見つけた場合は、こちらをご覧くださいhttp://stackoverflow.com/a/16976534/3863689助けてください。 – Spartan

0

android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" android:foreground="@drawable/xx_sel"
または
は、私は私のアルバムフォト項目pregressをできるようにそれを使用するか、fouceはそれにマスクを有することができます。
お手伝いします。

関連する問題