Android全選刪除CheckBox的簡單使用

main activity:


public class RecordActivity extends AppCompatActivity {
    @BindView(R.id.activity_item_record_recyclerview)
    RecyclerView recyclerView;
    @BindView(R.id.record_all_check)
    CheckBox allcheck;
    @BindView(R.id.record_btn_delete)
    Button delete;
    @BindView(R.id.record_btn_submit)
    Button submit;
    @BindView(R.id.record_all_ll)
    LinearLayout ll_btn;

    ItemAdapter adapter;
    RecyclerView.LayoutManager manager;
    ArrayList<ActionData> list;
    private String actionName;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_record);
        ButterKnife.bind(this);
   
        manager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(manager);

        adapter = new ItemAdapter(list);

        recyclerView.setAdapter(adapter);
       
        setAllcheck();
    }
  
    private void setAllcheck(){
        allcheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    for (int i = 0; i < list.size(); i++) {
                        if (!list.get(i).isCheck()){
                            list.get(i).setCheck(true);
                        }
                    }
                }else {
                    //當全選的時候在取消全不選
                    if (getChechedSum()== list.size()){
                        for (int i = 0; i < list.size(); i++) {
                            if (list.get(i).isCheck()){
                                list.get(i).setCheck(false);
                            }
                        }
                    }
                }
                UpdateRecyclerView();
            }
        });
        adapter.setChecked(new ItemAdapter.onChecked() {
            @Override
            public void CheckedChanged(int position, boolean isChecked) {
                //保存選擇狀態
                list.get(position).setCheck(isChecked);
                //全選了纔是設全選按鈕爲選擇
                if (getChechedSum()== list.size()){
                    allcheck.setChecked(true);
                }else{
                    //選擇了才取消
                    if (allcheck.isChecked()){
                        allcheck.setChecked(false);
                    }
                }
                UpdateRecyclerView();
            }
        });
    }
    /*
        *解決Recycleyview刷新報錯問題
       */
    private void UpdateRecyclerView() {
        Handler handler = new Handler();
        final Runnable r = new Runnable() {
            public void run() {
                adapter.notifyDataSetChanged();
            }
        };
        handler.post(r);
    }

    /**
     * 計算選擇的數目
     * @return
     */
    private int getChechedSum(){
        int checkNum = 0;
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).isCheck()){
                checkNum++;
            }
        }
        return checkNum;
    }

    @Override
    protected void onPause() {
        super.onPause();
        //不可見狀態時刷新界面
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).isCheck()){
                list.get(i).setCheck(false);
            }
        }
        //選擇了才取消
        if (allcheck.isChecked()){
            allcheck.setChecked(false);
        }
        UpdateRecyclerView();
    }
}


adpter:

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyHolder>{
    private ArrayList<ActionData> list;
    private onChecked checked;

    public void setChecked(onChecked checked) {
        this.checked = checked;
    }

    public ItemAdapter(ArrayList<ActionData> list){
        this.list = list;
    }
    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.record_list,parent,false);
        MyHolder holder = new MyHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyHolder holder, final int position) {
        if (list.get(position).getFileName().contains(".txt")){
            holder.record_icon.setImageResource(R.drawable.txt);
        }else {
            holder.record_icon.setImageResource(R.drawable.direct);
        }
        holder.record_name.setText(list.get(position).getFileName());
        holder.record_size.setText(ClearData.getFormatSize((double) list.get(position).getFileSize()));

        if (list.get(position).isCheck()){
            holder.record_check.setChecked(true);
        }else {
            holder.record_check.setChecked(false);
        }

        //獲取選擇狀態
        holder.record_check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                checked.CheckedChanged(position,isChecked);
            }
        });


        //長按編輯
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                //設置編輯可見

                return true; //返回true時不響應短按事件
            }
        });
        //短按查看
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String path = list.get(position).getActionName()+"/"+list.get(position).getFileName();
                if (list.get(position).getFileName().contains(".txt")){
                    ItemActivity.getFilesinfo(path);
                    Intent intent = new Intent(v.getContext(),ReadActivity.class);
                    intent.putExtra("file_name",path);
                    v.getContext().startActivity(intent);
                }else {
                    ItemActivity.getFilesinfo(path);
                    Intent intent = new Intent(v.getContext(),RecordActivity.class);
                    intent.putExtra("record_name",path);
                    v.getContext().startActivity(intent);
                }

            }
        });
    }

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

    protected static class MyHolder extends RecyclerView.ViewHolder{
        @BindView(R.id.record_one_icon)
        ImageView record_icon;
        @BindView(R.id.record_one_name)
        TextView record_name;
        @BindView(R.id.record_one_gathersize)
        TextView record_size;
        @BindView(R.id.record_one_check)
        CheckBox record_check;
        public MyHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this,itemView);
        }
    }
    public static interface onChecked{
        //選擇點擊事件回調
        public void CheckedChanged(int position, boolean isChecked);

    }
}


data:

public class ActionData extends DataSupport {
    private String actionName;
    private String gatherTime;
    private String fileName;
    private float fileSize;
    private boolean isCheck;
    public ActionData(){

    }

    public String getActionName() {
        return actionName;
    }

    public void setActionName(String actionName) {
        this.actionName = actionName;
    }

    public String getGatherTime() {
        return gatherTime;
    }

    public void setGatherTime(String gatherTime) {
        this.gatherTime = gatherTime;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public float getFileSize() {
        return fileSize;
    }

    public void setFileSize(float fileSize) {
        this.fileSize = fileSize;
    }

    public boolean isCheck() {
        return isCheck;
    }

    public void setCheck(boolean check) {
        isCheck = check;
    }
}


發佈了141 篇原創文章 · 獲贊 36 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章