2

我需要将 RecyclerView 中选中的复选框从一个活动发送到另一个活动。只有选中的复选框项目行应该转到下一个活动。我已经尝试了很多,但找不到任何解决这个问题的方法。所以请帮我解决这个问题并找到合适的解决方案。谢谢!

这是我的布局


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




}
4

1 回答 1

0

您可以将这些选中的项目保存为列表并将其作为参数传递给其他活动。只需将一个函数传递给适配器,然后单击 CheckBox,执行您的操作,例如将项目添加到列表中。另一种方法是您可以使用应用程序级别的 ViewModel 并将它们重用于这些活动,这样您就不必在它们之间传递任何东西。

于 2020-06-11T08:47:56.857 回答