【问题标题】:how to save the values of checkboxes in arraylist如何在arraylist中保存复选框的值
【发布时间】:2018-08-30 09:23:23
【问题描述】:

我已经制作了一个 recyclerview.in recyclerview 我有 n 个复选框,并且有一个全选按钮,它选择所有复选框都变为真。我已经做到了。现在我只想在状态为真时将值 pf 复选框保存在 arraylist 中,并在取消选择时从 arraylist 中清除它。在 selectall 按钮上,所有复选框都存储在 arraylist 中。我该怎么做。

  public class SearchFragment extends BaseFragment {

ArrayList<String> arrayList = new ArrayList<>();
public TextView tv2;
public RecyclerView rvList;
Context context;
public static SearchFragment newInstance () {
    return new SearchFragment();
}

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
                          Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_search, container, false);
    tv2=(TextView) view.findViewById(R.id.tv2);



    rvList=(RecyclerView)view.findViewById(R.id.rvList);
    arrayList = new ArrayList<>();
    for (int i = 0; i < 10; i++){
        arrayList.add("Produk " + i);


    }

    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());


    rvList.setLayoutManager(layoutManager);


    MyAdapter mAdapter = new MyAdapter(getContext(),arrayList);


    // 4. set adapter
    rvList.setAdapter(mAdapter);
    // 5. set item animator to DefaultAnimator
    rvList.setItemAnimator(new DefaultItemAnimator());


    return view;
   }

   @Override
   public void onViewCreated (View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ButterKnife.bind(this, view);


    tv2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            MyAdapter mAdapter = new MyAdapter(getContext(),arrayList);

            rvList.setAdapter(mAdapter);

            if(AppContants.CheckFlag){
                AppContants.CheckFlag=false;
                //arrayList.addAll(arrayList);

            }
            else{
                AppContants.CheckFlag=true;
                //arrayList.clear();
            }

     mAdapter.notifyDataSetChanged();

        }
    });



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

    private HashMap<Integer, Boolean> isChecked = new HashMap<>();
    private Context mContext;
    private LayoutInflater inflater;
    CheckBox cbProduk;

    ArrayList<String> arrayList = new ArrayList<>();

    public MyAdapter(Context context, List<String> arrayList){
        this.mContext = context;
        this.arrayList = (ArrayList<String>) arrayList;
        inflater = LayoutInflater.from(context);
    }


    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View rootView = inflater.inflate(R.layout.list_item_produt, parent, false);

        MyViewHolder holder = new MyViewHolder(rootView);
        cbProduk=(CheckBox)rootView.findViewById(R.id.cbProduk);
        return holder;
    }


    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.cbProduk.setText(arrayList.get(position));


        if (AppContants.CheckFlag) {
           holder.cbProduk.setChecked(true);


        } else  {
            holder. cbProduk.setChecked(false);
        }
        MyAdapter mAdapter = new MyAdapter(getContext(),arrayList);

       if (AppContants.CheckFlag) {
            holder.cbProduk.setChecked(true);


        } else  {
            holder. cbProduk.setChecked(false);
        }


    }

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

    public void NotifyDatasetchanged() {

    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        CheckBox cbProduk;

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

            cbProduk = (CheckBox) itemView.findViewById(R.id.cbProduk);

            cbProduk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (isChecked){
                        cbProduk.setChecked(true);


                        Toast.makeText(mContext, "checklist", Toast.LENGTH_SHORT).show();
                    } else {
                        cbProduk.setChecked(false);

                        Toast.makeText(mContext, "unchecklist", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    }
      }

     }

【问题讨论】:

  • 如果我不想在 shareprefrence 中保存价值怎么办。我想在arraylist中保存值。
  • 查看link

标签: android arraylist checkbox


【解决方案1】:

您可以使用稀疏布尔数组来检查项目的状态,例如

private SparseBooleanArray itemStateArray= new SparseBooleanArray();

然后在项目点击处理程序 onClick() 中使用 itemStateArray 中项目的状态在切换之前检查

@Override
public void onClick(View v) {
    int adapterPosition = getAdapterPosition();
    if (!itemStateArray.get(adapterPosition, false)) {
        mCheckedTextView.setChecked(true);
        itemStateArray.put(adapterPosition, true);
    }
    else  {
        mCheckedTextView.setChecked(false);
        itemStateArray.put(adapterPosition, false);
    }
}

查看完整用法here

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 2018-02-06
    • 2017-04-28
    • 2014-07-31
    • 2021-01-10
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多