简体   繁体   中英

Need to send the checked checkbox in RecyclerView from one activity to another

I need to send the checked checkbox in RecyclerView from one activity to another. Only the checked checkbox item row should go to the next activity. I have tried a lot but couldn't find any solution to this problem. So please help me to solve this problem and find a suitable solution. Thanks!

This is my layout


import android.content.Context;
import android.os.Build;

import android.util.Base64;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;


import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import static java.text.DateFormat.DEFAULT;


public class sacAdapter extends RecyclerView.Adapter<sacAdapter.MyViewHolder>
        implements Filterable {
    private Context context;
    private List<SAClist> SaCList;
    private List<SAClist> SACListFiltered;

    Double a;
    int b;
    int c;
    Double d;
    LayoutInflater inflater;
    Double e;
    ViewGroup viewGroup;
    Double value5;

    SAC myActivity;


    private SACAdapterListener listener;
    private DecimalFormat df2 = new DecimalFormat("#############.##");
    private DecimalFormat df = new DecimalFormat("0.#");
    private int number = 0;
    private int number1 = 0;


    public class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView ProName, Rate, Qty, Total;
        public ImageView thumbnail;
        public Button Qty1, Qty2;
        CheckBox check;
        TextView cartICON;


//        public ImageView thumbnail;

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


            ProName = view.findViewById(R.id.ProName);
            Rate = view.findViewById(R.id.Rate);
            Qty = view.findViewById(R.id.Qty);
            check = view.findViewById(R.id.check);
            Total = view.findViewById(R.id.Total);
            Qty1 = view.findViewById(R.id.Qty1);
            Qty2 = view.findViewById(R.id.Qty2);
            check = view.findViewById(R.id.check);


            thumbnail = view.findViewById(R.id.thumbnail);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // send selected contact in callback
                    listener.onSACSelected(SACListFiltered.get(getAdapterPosition()));
                }
            });
        }
    }


    public sacAdapter(Context context, List<SAClist> sacList, SACAdapterListener listener) {
        this.context = context;
        this.listener = listener;
        this.SaCList = sacList;
        this.SACListFiltered = sacList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent1, int viewType1) {
        View itemView = LayoutInflater.from(parent1.getContext())
                .inflate(R.layout.sac_item_row, parent1, false);

        return new MyViewHolder(itemView);

    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {


        final SAClist saclist = SACListFiltered.get(position);
        holder.ProName.setText(saclist.getPName());
        holder.Rate.setText("Rate : " + saclist.getPRate());


        String Ra = saclist.PRate;
        double value1 = Ra.isEmpty() ? 0.0 : Double.parseDouble(Ra);
        String TOT1 = holder.Qty.getText().toString().trim();
        final double value3 = TOT1.isEmpty() ? 0.0 : Double.parseDouble(TOT1);

        a = value1 * value3;
        String stringValue35 = Double.toString(Double.parseDouble(df2.format(a)));
        holder.Total.setText("TOTAL : " + stringValue35);


        byte[] decoder = Base64.decode(saclist.getPImage(), DEFAULT);


        Glide.with(context)
                .load(decoder)
                .apply(RequestOptions.noTransformation())
                .into(holder.thumbnail);


        holder.Qty1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                number = Integer.parseInt(holder.Qty.getText().toString());
                number++;

                holder.Qty.setText("" + number);

                ////////////////////////////
                String Ra = saclist.PRate;
                double value1 = Ra.isEmpty() ? 0.0 : Double.parseDouble(Ra);
                String TOT5 = holder.Qty.getText().toString().trim();
                value5 = TOT5.isEmpty() ? 0.0 : Double.parseDouble(TOT5);

                a = value1 * value5;
                String stringValue35 = Double.toString(Double.parseDouble(df2.format(a)));
                holder.Total.setText("TOTAL : " + stringValue35);

                if (number <= 0) {
                    holder.check.setChecked(false);
                } else {
                    holder.check.setChecked(true);
                }


//                number1++;
//                SAC.update_counter(""+number1);
            }
        });
        holder.Qty2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                number = Integer.parseInt(holder.Qty.getText().toString());
                if (number <= 0) {
                    number = 0;
                } else {

                    number--;


                    holder.Qty.setText("" + number);
                }

                /////////////////////////////////
                String Ra = saclist.PRate;
                double value1 = Ra.isEmpty() ? 0.0 : Double.parseDouble(Ra);
                String TOT = holder.Qty.getText().toString().trim();
                double value2 = TOT.isEmpty() ? 0.0 : Double.parseDouble(TOT);

                a = value1 * value2;
                String stringValue35 = Double.toString(Double.parseDouble(df2.format(a)));
                holder.Total.setText("TOTAL : " + stringValue35);

                if (number <= 0) {
                    holder.check.setChecked(false);
                } else {
                    holder.check.setChecked(true);
                }



            }
        });
        holder.check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                if(holder.check.isChecked()){
                    number1++;
                    SAC.update_counter(""+number1);
                }
                if (!holder.check.isChecked()){
                    number1--;
                    SAC.update_counter(""+number1);
                }
            }
        });


    }



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

    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                String charString = charSequence.toString();
                if (charString.isEmpty()) {
                    SACListFiltered = SaCList;
                } else {
                    List<SAClist> filteredList = new ArrayList<>();
                    for (SAClist row : SaCList) {

                        // name match condition. this might differ depending on your requirement
                        // here we are looking for name or phone number match
                        if (row.getPName().toLowerCase().contains(charString.toLowerCase())) {
                            filteredList.add(row);
                        }
                    }

                    SACListFiltered = filteredList;
                }

                FilterResults filterResults = new FilterResults();
                filterResults.values = SACListFiltered;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                SACListFiltered = (ArrayList<SAClist>) filterResults.values;
                notifyDataSetChanged();
            }
        };
    }

    public interface SACAdapterListener {
        void onSACSelected(SAClist sac);
    }




}

You can save those checked items as list and pass it as an argument to the other activity. Just pass a function to the adapter, and on CheckBox clicked, do your stuff such as adding the item to the list. Another way is that you could use an application level ViewModel and reuse them for those activities, that way you don't have to pass anything between them.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM