2015-01-27 7 views
3

CardViews를 사용하여 RecyclerView를 작성하고 CAB을 사용하여 선택시 여러 개의 카드를 삭제하려고합니다. 선택한 카드에 배경색을 어떻게 부여합니까?CardView는 RecyclerView에서 배경색을 선택했습니다.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_activated="true" android:drawable="@color/primary_dark" /> 

    <item android:drawable="@android:color/transparent" /> 

</selector> 

과 같은 CardView 레이아웃에 적용 : 나는 다음과 같은 statelistdrawable 사용하려고 아래

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/card_view" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
android:background="@drawable/statelist_item_background" 
     card_view:cardCornerRadius="10dp" 
    card_view:cardElevation="10dp" 
android:layout_marginTop="5dp" 
android:layout_marginBottom="5dp" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp" 


    > 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 

     > 

     <ImageView 
      android:id="@+id/imageView" 
      android:tag="image_tag" 
      android:layout_width="72dp" 
      android:layout_height="100dp" 
      android:layout_margin="5dp" 
      android:layout_weight="1" 
      android:src="@drawable/one"/> 

     <LinearLayout 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="12dp" 
      android:layout_weight="2" 
      android:orientation="vertical" 
      > 

      <TextView 
       android:id="@+id/textViewName" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="10dp" 
       android:text="Large Text" 
       android:textAppearance="?android:attr/textAppearanceLarge"/> 

      <TextView 
       android:id="@+id/textViewEmail" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="10dp" 

       android:text="Medium Text" 
       android:textAppearance="?android:attr/textAppearanceMedium"/> 

     </LinearLayout> 
    </LinearLayout> 

</android.support.v7.widget.CardView> 

하는 방법 업데이트

public class modeladapter extends RecyclerView.Adapter<modeladapter.myholder> { 

    ArrayList<MyModel> arraylist; 
SparseBooleanArray selecteditems; 
    public modeladapter(ArrayList<MyModel> ar) { 
     arraylist=ar; 
     selecteditems=new SparseBooleanArray(); 
    } 

    public void removeData(int position) { 
     arraylist.remove(position); 
     notifyItemRemoved(position); 
    } 

    public MyModel getItem(int position) { 
     return arraylist.get(position); 
    } 

    public void addData(MyModel newModelData, int position) { 
     arraylist.add(position, newModelData); 
     notifyItemInserted(position); 
    } 

    public void toggleSelection(int pos) { 
     if (selecteditems.get(pos, false)) { 
      selecteditems.delete(pos); 
     } 
     else { 
      selecteditems.put(pos, true); 
     } 
     notifyItemChanged(pos); 
    } 

    public void clearSelections() { 
     selecteditems.clear(); 
     notifyDataSetChanged(); 
    } 

    public int getSelectedItemCount() { 
     return selecteditems.size(); 
    } 

    public List<Integer> getSelectedItems() { 
     List<Integer> items = new ArrayList<Integer>(selecteditems.size()); 
     for (int i = 0; i < selecteditems.size(); i++) { 
      items.add(selecteditems.keyAt(i)); 
     } 
     return items; 
    } 





    @Override 
    public modeladapter.myholder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     LayoutInflater lf=LayoutInflater.from(viewGroup.getContext()); 

      View v = lf.inflate(R.layout.card_lay, viewGroup, false); 

//   v.setOnClickListener(Activity_Main.listener); 
      myholder m=new myholder(v); 
      return m; 



    } 


    @Override 
    public void onBindViewHolder(modeladapter.myholder m, int i) { 

       m.cimage.setImageResource(arraylist.get(i).url); 
       m.email.setText(arraylist.get(i).email); 
       m.name.setText(arraylist.get(i).name); 
m.itemView.setActivated(selecteditems.get(i,false)); 

     } 

    @Override 
    public int getItemCount() {return (arraylist.size());} 

    public static class myholder extends RecyclerView.ViewHolder 
    { 
     ImageView cimage; 
     TextView name,email; 

     public myholder(View itemView) { 
      super(itemView); 
      cimage= (ImageView) itemView.findViewById(R.id.imageView); 
      name= (TextView) itemView.findViewById(R.id.textViewName); 
      email= (TextView) itemView.findViewById(R.id.textViewEmail); 
      if(itemView.isActivated()) 
       itemView.setBackgroundColor(itemView.getContext().getResources().getColor(R.color.primary_dark)); 
      else 
       itemView.setBackgroundColor(Color.parseColor("#ffffff")); 
     } 
    } 

친절하게 내 어댑터에 대한 코드입니다 선택한 항목의 배경색을 변경할 수 있습니다. 감사

당신은 반드시 할 필요가 없습니다
+0

당신이 해결나요? –

+0

@ JaredBurrows 나는 그렇게 할 수 있었다. – user2779311

+0

내 게시물 도움이 되었습니까? –

답변

5

StateListDrawable 당신은 선택을 확인합니다 어댑터의 방법이 필요 : 당신의 RecylcerView.Adapter, 변화 그리고

sparseArray.valueAt(i).isSelected() 

:

if (itemView.isActivated()) 
    itemView.setBackgroundColor(itemView.getContext().getResources().getColor(R.color.primary_dark)); 
else 
    itemView.setBackgroundColor(Color.parseColor("#ffffff")); 

받는 사람 (itemView가 아닌 ​​cardView를 변경해야 함) :

viewHolder.cardView.setCardBackgroundColor(sparseArray.valueAt(i).isSelected() ? Color.LTGRAY : Color.WHITE); 
+0

어댑터에있는 선택 항목을 확인하는 방법은 어디입니까? ViewHolder() 또는 onBindViewHolder()? 위의 예를 보여주기 위해 편집 할 수 있습니까? – AJW

0
card_view:cardBackgroundColor="@color/statelist_item_background" 
0

대신의 CardView 배경 색상의 CardView 내부에있는 LinearLayout을 변경 변경 :

를 링크 여기

것 (참고 :이 색상 상태 목록이 아닌 당김 상태 목록입니다)

<android.support.v7.widget.CardView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/card_view" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
card_view:cardCornerRadius="10dp" 
card_view:cardElevation="10dp" 
android:layout_marginTop="5dp" 
android:layout_marginBottom="5dp" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp"> 


<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:background="@drawable/statelist_item_background"> 

    <ImageView 
     android:id="@+id/imageView" 
     android:tag="image_tag" 
     android:layout_width="72dp" 
     android:layout_height="100dp" 
     android:layout_margin="5dp" 
     android:layout_weight="1" 
     android:src="@drawable/one"/> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="12dp" 
     android:layout_weight="2" 
     android:orientation="vertical" 
     > 

     <TextView 
      android:id="@+id/textViewName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginTop="10dp" 
      android:text="Large Text" 
      android:textAppearance="?android:attr/textAppearanceLarge"/> 

     <TextView 
      android:id="@+id/textViewEmail" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginTop="10dp" 

      android:text="Medium Text" 
      android:textAppearance="? 
      android:attr/textAppearanceMedium"/> 

    </LinearLayout> 
</LinearLayout> 

관련 문제