2015-10-30 5 views
8

Ich habe die RecyclerView mit Bild, Titel und Kontrollkästchen ausgefüllt. Ich habe zwei Probleme.Holen Sie sich die Liste der markierten Kontrollkästchen von recyclerview android

  1. Wie Sie das Kontrollkästchen aktiviert machen, wenn der Imageview oder das gesamte Recycler Element geklickt wird.

  2. Ich muss zur nächsten Aktivität gehen, indem ich alle geprüften Artikel aus der Recycler-Ansicht abrufe.

Mein Layout:

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="8dp"> 

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="match_parent" 
      android:layout_height="150dp" 
      android:layout_gravity="center_horizontal" 
      android:contentDescription="Interests" 
      android:scaleType="centerCrop" 
      android:src="@drawable/ic_yash_dp" /> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_gravity="bottom" 
      android:layout_margin="5dp" 
      android:layout_marginTop="24dp" 
      android:background="@drawable/rounded_corners" 
      android:gravity="bottom" 
      android:padding="5dp" 
      android:text="GYM" 
      android:textAlignment="center" 
      android:textColor="@color/white" /> 

     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/checkBox" 
      android:layout_margin="2dp" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

    </RelativeLayout> 

Mein Adapter:

@Override 
public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
final InterestBean model = arrayList.get(position); 
final int pos = position; 

RecyclerViewHolder mainHolder = (RecyclerViewHolder) holder;// holder 

Bitmap image = BitmapFactory.decodeResource(context.getResources(), 
     model.getImage());// This will convert drawbale image into bitmap 

// setting title 
mainHolder.title.setText(model.getTitle()); 
mainHolder.imageview.setImageBitmap(image); 
mainHolder.checkBox.setChecked(arrayList.get(position).isSelected()); 
mainHolder.checkBox.setTag(arrayList.get(position)); 


mainHolder.checkBox.setOnClickListener(new View.OnClickListener()  { 
public void onClick(View v) { 
CheckBox cb = (CheckBox) v; 
InterestBean contact = (InterestBean) cb.getTag(); 

contact.setIsSelected(cb.isChecked()); 
arrayList.get(pos).setIsSelected(cb.isChecked()); 
selectedItems.add(pos); 
Toast.makeText(
v.getContext(), pos + cb.isChecked(), Toast.LENGTH_LONG).show(); 
} 
});} 

Antwort

22

Eine einfache Lösung kann sein, dass Sie OnItemCheckLister erstellen und implementieren es ähnlich wie folgt vor:

public class MyAdapter extends RecyclerViewAdapter { 

    interface OnItemCheckListener { 
     void onItemCheck(Item item); 
     void onItemUncheck(Item item); 
    } 

    ... 

    @NonNull 
    private OnItemCheckListener onItemCheckListener; 

    public MyAdapter (List<Item> items, @NonNull OnItemCheckListener onItemCheckListener) { 
     this.items = items; 
     this.onItemClick = onItemCheckListener; 
    } 

    ... 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 
     if (holder instanceof MyViewHolder) { 
      final Item currentItem = items.get(position); 

      ... 

      ((MyViewHolder) holder).setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        ((MyViewHolder) holder).checkbox.setChecked(
          !((MyViewHolder) holder).checkbox.isChecked()); 
        if (((MyViewHolder) holder).checkbox.isChecked()) { 
         onItemClick.onItemCheck(currentItem); 
        } else { 
         onItemClick.onItemUncheck(currentItem); 
        } 
       } 
      }); 
     } 
    } 

    static class MyViewHolder extends RecyclerView.ViewHolder { 
     CheckBox checkbox; 
     View itemView; 

     ... 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      this.itemView = itemView; 
      checkbox = (CheckBox) itemView.findViewById(R.id.checkbox); 
      checkbox.setClickable(false); 
      ... 
     } 

     public void setOnClickListener(View.OnClickListener onClickListener) { 
      itemView.setOnClickListener(onClickListener); 
     } 
    } 
} 

Dann in der Tätigkeit, können wir dies tun:

private List<Item> currentSelectedItems = new ArrayList<>(); 

    ... 

    myAdapter = new MyAdapter(items, new MyAdapter.OnItemCheckListener() { 
      @Override 
      public void onItemCheck(Item item) { 
       currentSelectedItems.add(item); 
      } 

      @Override 
      public void onItemUncheck(Item item) { 
       currentSelectedItems.remove(item); 
      } 
     }); 

Dann können Sie Sachen Witz tun h currentSelectedItems.

Hinweis: Da für diese Lösung angenommen wird, dass das gesamte Element gedrückt wird, ist das Kontrollkästchen so eingestellt, dass es nicht angeklickt werden kann.

+0

Das ist einfach unglaublich, Leute benutzen bitte diese Lösung! –

0

1) Sie mainHolder.imageview OnClickListener
2) Zwei Schritt hinzufügen:

  1. hinzufügen zu InterestBean Modell boole n isChecked
  2. Wo gehen Sie zur nächsten Aktivität, erhalten Sie alle InterestBeans, erhalten Sie alle InterestBeans überprüft und speichern Sie es.

Code:

mainHolder.imageview.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick (View v) 
     { 
      mainHolder.checkBox.setChecked(!mainHolder.checkBox.isChecked()); 
     } 
    } 
    ); 
+0

Wie die Checkbox auf Bild klicken Zuhörer geprüft einzustellen. – Yashwanth

+0

Ich schreibe auf Kommentar – andrey7mel

+0

mainHolder.imageview.setOnClickListener (neu View.OnClickListener() { @Override public void onClick (Blick v) {// Wie es cheked einstellen} ?}); – Yashwanth

2

Sie können die Model-Klasse verwenden, um RecyclerView-geprüfte Elemente abzurufen. Weitere Referenz: Android Recyclerview checkbox

Modell

public class Model { 

    private boolean isSelected; 
    private String animal; 

    public String getAnimal() { 
     return animal; 
    } 

    public void setAnimal(String animal) { 
     this.animal = animal; 
    } 

    public boolean getSelected() { 
     return isSelected; 
    } 

    public void setSelected(boolean selected) { 
     isSelected = selected; 
    } 
} 

Adapter

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
    import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 


    public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 

private LayoutInflater inflater; 
public static ArrayList<Model> imageModelArrayList; 
private Context ctx; 

public CustomAdapter(Context ctx, ArrayList<Model> imageModelArrayList) { 

    inflater = LayoutInflater.from(ctx); 
    this.imageModelArrayList = imageModelArrayList; 
    this.ctx = ctx; 
} 

@Override 
public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view = inflater.inflate(R.layout.rv_item, parent, false); 
    MyViewHolder holder = new MyViewHolder(view); 

    return holder; 
} 

@Override 
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) { 

    holder.checkBox.setText("Checkbox " + position); 
    holder.checkBox.setChecked(imageModelArrayList.get(position).getSelected()); 
    holder.tvAnimal.setText(imageModelArrayList.get(position).getAnimal()); 

    // holder.checkBox.setTag(R.integer.btnplusview, convertView); 
    holder.checkBox.setTag(position); 
    holder.checkBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Integer pos = (Integer) holder.checkBox.getTag(); 
      Toast.makeText(ctx, imageModelArrayList.get(pos).getAnimal() + " clicked!", Toast.LENGTH_SHORT).show(); 

      if (imageModelArrayList.get(pos).getSelected()) { 
       imageModelArrayList.get(pos).setSelected(false); 
      } else { 
       imageModelArrayList.get(pos).setSelected(true); 
      } 
     } 
    }); 


} 

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

class MyViewHolder extends RecyclerView.ViewHolder { 

    protected CheckBox checkBox; 
    private TextView tvAnimal; 

    public MyViewHolder(View itemView) { 
     super(itemView); 

     checkBox = (CheckBox) itemView.findViewById(R.id.cb); 
     tvAnimal = (TextView) itemView.findViewById(R.id.animal); 
    } 

} 
0

addieren gerade zwei überschreiben Methoden der recyclerview

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 
Verwandte Themen