2016-08-30 8 views
2

私はrecyclerviewでナビゲーション・ドロワーを作成していましたが、次に、recyclerviewの選択/クリックされた行を強調表示する必要がありました。 addOnItemTouchListenerの中に.setBackgroundColor(Color.GRAY)を入れました。 それは動作しますが、特定の行数の後でバックグラウンドカラープロパティが繰り返されます... どうすれば解決できますか?あなたは、あなたがやっている内容を正確に把握しない限り、事前に おかげで...特定の行数の後にrecyclerview行プロパティを繰り返しますか?

 @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      View child = rv.findChildViewUnder(e.getX(), e.getY()); 
      if(child != null && gestureDetector.onTouchEvent(e)) { 
       int position = rv.getChildAdapterPosition(child); 
       DrawerItem model = mDrawerItemList.get(position); 
       child.setBackgroundColor(Color.GRAY); 
       drawerLayout.closeDrawers(); 
     Toast.makeText(RecyclerNavigationActivity.this,String.valueOf(position),Toast.LENGTH_SHORT).show(); 
      } 

      return false; 
     } 

答えて

3

あなたがonBindViewHolder()外部からRecyclerView's子ビューには触れてはいけません。 RecyclerViewは見えなくなったレイアウトを再利用しようとしています。そのため、あるアイテムの色を変更してレイアウトを再利用するときに変更しないと、変更された色が維持されます。

あなたがする必要があるのは、OnClickListenerViewHolderに添付して、その背景をonBindViewHolder()メソッドで更新することです。

public class YourAdapter extends RecyclerViewAdapter { 

    ... 

    int selectedItem = -1; 

    public void setSelectedItem(int item) { 
     this.selectedItem = i; 
     this.notifyItemChanged(selectedItem); 
    } 

    @Override 
    onBindViewHolder(ViewHolder holder, int position) { 

     ... // other stuff here 

     if (position == selectedItem) { 
      holder.layout.setBackgroundColor(Color.GRAY); 
     } else { 
      holder.layout.setBackgroundColor(Color.WHITE); 
     } 
    } 
} 
+0

これは機能しています、ありがとうPawelo .. –

関連する問題