CheckBox gets unchecked on scroll in a custom listview

前端 未结 4 1079
野趣味
野趣味 2020-11-29 12:13

I know that this question has been asked over and over again but still I\'ve not been a able to find a suggestion that really helps me. The checkbox is unchecked whenever th

4条回答
  •  北荒
    北荒 (楼主)
    2020-11-29 12:56

    Here is an example. Read the comments in the getView(...) of the adapter provided below.


    class TaskObject {
            private int pid;
            private String processName;
            private boolean toKill;
    ///getters/setters
            public boolean isToKill() {
                return toKill;
            }    
            public void setToKill(boolean toKill) {
                this.toKill = toKill;
            }
           ................................
        }
    

    class TaskListAdapter extends BaseAdapter {
    
        private static final String TAG = "adapter";
    
        ArrayList list;
        Context context;
    
        public TaskListAdapter(Context context) {
            Log.d(TAG, "created new task list adapter");
            this.context = context;
            if (list == null) {
                list = new ArrayList();
            }
        }
    
        public void addTask(TaskObject taskObject) {
            list.add(taskObject);
        }
    
        public void clearTasks() {
            list.clear();
            Log.d(TAG, "list size:" + list.size());
            this.notifyDataSetChanged();
        }
    
        public int getCount() {
            return list.size();
        }
    
        public TaskObject getItem(int position) {
            return list.get(position);
        }
    
        public long getItemId(int position) {
            return position;
        }
    
        public View getView(final int position, View convertView, ViewGroup parent) {        
            RelativeLayout rl = new RelativeLayout(context);
            TextView textPid = new TextView(context);
            textPid.setText(Integer.toString(getItem(position).getPid()));
            TextView textName = new TextView(context);
            textName.setText(getItem(position).getProcessName()); 
    
           /////Here is your and it will set back your checked item after scroll
             CheckBox chckKill = new CheckBox(context);
                if(getItem(position).isToKill())
                {
                        chckKill.setChecked(true);
                }
           ////////////////////////////////////////////////////////////////////           
    
                chckKill.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                    //is chkIos checked?
                 if (((CheckBox) v).isChecked()) {
                     getItem(position).setToKill(true);
                    }
                  }
                });
                chckKill.setTag(getItem(position).getPid());
            /////////NOT LAYOUTED USE LAYOUT
                rl.addView(chckKill);
                rl.addView(textName);
                rl.addView(textPid);
                return rl;
            }    
    

    hope it helps abit.

提交回复
热议问题