webentwicklung-frage-antwort-db.com.de

Rufen Sie eine Liste der aktivierten Kontrollkästchen von Android auf

Ich habe die RecyclerView mit Bild, Titel und Checkbox bestückt. Ich habe zwei Probleme.

  1. Wie wird das Kontrollkästchen aktiviert, wenn auf die Bildansicht oder das gesamte Recyclingelement geklickt wird.

  2. Ich muss zur nächsten Aktivität gehen, indem ich alle geprüften Artikel aus der Recyclingübersicht holt.

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();
}
});}
13
Yashwanth

Eine einfache Lösung kann sein, dass Sie OnItemCheckLister erstellen und wie folgt implementieren können:

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 können wir in der Aktivität Folgendes 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 kannst du Sachen mit currentSelectedItems machen.

Hinweis: Da bei dieser Lösung das gesamte Element gedrückt werden muss, ist das Kontrollkästchen so eingestellt, dass es nicht angeklickt werden kann.

38
ninjahoahong

Sie können die Modellklasse verwenden, um aufbereitete Elemente vom RecyclerView-Modus abzurufen. Weitere Hinweise: Kontrollkästchen für Android-Recyclerview

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

}
3
user6017633

von @ninjahoahong Ich füge Checkbox Listenner in der onBindViewHolder Methode hinzu und Checkbox kann klicken.

viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int pos = viewHolder.getAdapterPosition();
            ChoiceItem currentItem = mChoice.get(pos);
            if(viewHolder.checkBox.isChecked()){
                onItemCheckListener.onItemCheck(currentItem);
                currentItem.setCheck(true);
            }else{
                onItemCheckListener.onItemUncheck(currentItem);
                currentItem.setCheck(false);
            }
        }
    });
0
Palida

Fügen Sie einfach zwei Überschreibungsmethoden für das Recycling hinzu

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

@Override
public int getItemViewType(int position) {
    return position;
}
0
Harish Reddy

1) Sie können mainHolder.imageview OnClickListener hinzufügen
2) Zwei Schritte:

  1. Zu Interesse hinzufügenBean model boolen isChecked
  2. Wo gehen Sie zur nächsten Aktivität, holen Sie sich alle InterestBeans, holen Sie alle geprüften InterestBeans und speichern Sie sie. 

Code:

mainHolder.imageview.setOnClickListener(new View.OnClickListener()
    {
        public void onClick (View v)
        {
            mainHolder.checkBox.setChecked(!mainHolder.checkBox.isChecked());
        }
    }
    );
0
andrey7mel
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {
        @Override
        public void onClick(View view, int position) {
            List list= aList.get(position);
            //Toast.makeText(getApplicationContext(), movie.getTitle() + " is selected!", Toast.LENGTH_SHORT).show();
            action(list.getId());
        }

        @Override
        public void onLongClick(View view, int position) {

        }
    }));
0
Quang