checkbox in listview for multiple selection of contacts

前端 未结 3 1669
轮回少年
轮回少年 2020-12-18 16:12

I had tried to to put checkbox in listview through layout inflator and I got success but the problem is when I select the multiple contacts there is no problem but when I de

相关标签:
3条回答
  • 2020-12-18 16:51

    i found the answer.... i had just taken a new variable in contact class...

    public class PlanetsActivity extends Activity {
    private ListView mainListView;
    private Contact[] contact_read;
    private Cursor mCursor;
    private ArrayAdapter<Contact> listAdapter;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        // Find the ListView resource.
        mainListView = (ListView) findViewById(R.id.mainListView);
    
        mainListView
                .setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View item,
                            int position, long id) {
                        Contact planet = listAdapter.getItem(position);
                        planet.toggleChecked();
                        ContactViewHolder viewHolder = (ContactViewHolder) item
                                .getTag();
                        viewHolder.getCheckBox().setChecked(planet.isChecked());
                    }
                });
    
        // Throw Query and fetch the contacts.
    
        String[] projection = new String[] { Contacts.HAS_PHONE_NUMBER,
                Contacts._ID, Contacts.DISPLAY_NAME };
    
        mCursor = managedQuery(Contacts.CONTENT_URI, projection,
                Contacts.HAS_PHONE_NUMBER + "=?", new String[] { "1" },
                Contacts.DISPLAY_NAME);
    
        if (mCursor != null) {
            mCursor.moveToFirst();
            contact_read = new Contact[mCursor.getCount()];
    
            // Add Contacts to the Array
    
            int j = 0;
            do {
    
                contact_read[j] = new Contact(mCursor.getString(mCursor
                        .getColumnIndex(Contacts.DISPLAY_NAME)));
                j++;
            } while (mCursor.moveToNext());
    
        } else {
            System.out.println("Cursor is NULL");
        }
    
        // Add Contact Class to the Arraylist
    
        ArrayList<Contact> planetList = new ArrayList<Contact>();
        planetList.addAll(Arrays.asList(contact_read));
    
        // Set our custom array adapter as the ListView's adapter.
        listAdapter = new ContactArrayAdapter(this, planetList);
        mainListView.setAdapter(listAdapter);
    }
    
    /** Holds Contact data. */
    @SuppressWarnings("unused")
    private static class Contact {
        private String name = "";
        private boolean checked = false;
    
        public Contact() {
        }
    
        public Contact(String name) {
            this.name = name;
        }
    
        public Contact(String name, boolean checked) {
            this.name = name;
            this.checked = checked;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public boolean isChecked() {
            return checked;
        }
    
        public void setChecked(boolean checked) {
            this.checked = checked;
        }
    
        public String toString() {
            return name;
        }
    
        public void toggleChecked() {
            checked = !checked;
        }
    }
    
    /** Holds child views for one row. */
    @SuppressWarnings("unused")
    private static class ContactViewHolder {
        private CheckBox checkBox;
        private TextView textView;
    
        public ContactViewHolder() {
        }
    
        public ContactViewHolder(TextView textView, CheckBox checkBox) {
            this.checkBox = checkBox;
            this.textView = textView;
        }
    
        public CheckBox getCheckBox() {
            return checkBox;
        }
    
        public void setCheckBox(CheckBox checkBox) {
            this.checkBox = checkBox;
        }
    
        public TextView getTextView() {
            return textView;
        }
    
        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }
    
    /** Custom adapter for displaying an array of Contact objects. */
    private static class ContactArrayAdapter extends ArrayAdapter<Contact> {
    
        private LayoutInflater inflater;
    
        public ContactArrayAdapter(Context context, List<Contact> planetList) {
            super(context, R.layout.simplerow, R.id.rowTextView, planetList);
            // Cache the LayoutInflate to avoid asking for a new one each time.
            inflater = LayoutInflater.from(context);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // Contact to display
            Contact planet = (Contact) this.getItem(position);
            System.out.println(String.valueOf(position));
    
            // The child views in each row.
            CheckBox checkBox;
            TextView textView;
    
            // Create a new row view
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.simplerow, null);
    
                // Find the child views.
                textView = (TextView) convertView
                        .findViewById(R.id.rowTextView);
                checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01);
    
                // Optimization: Tag the row with it's child views, so we don't
                // have to
                // call findViewById() later when we reuse the row.
                convertView.setTag(new ContactViewHolder(textView, checkBox));
    
                // If CheckBox is toggled, update the Contact it is tagged with.
                checkBox.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        CheckBox cb = (CheckBox) v;
                        Contact contact = (Contact) cb.getTag();
                        contact.setChecked(cb.isChecked());
                    }
                });
            }
            // Reuse existing row view
            else {
                // Because we use a ViewHolder, we avoid having to call
                // findViewById().
                ContactViewHolder viewHolder = (ContactViewHolder) convertView
                        .getTag();
                checkBox = viewHolder.getCheckBox();
                textView = viewHolder.getTextView();
            }
    
            // Tag the CheckBox with the Contact it is displaying, so that we
            // can
            // access the Contact in onClick() when the CheckBox is toggled.
            checkBox.setTag(planet);
    
            // Display Contact data
            checkBox.setChecked(planet.isChecked());
            textView.setText(planet.getName());
    
            return convertView;
        }
    
    }
    
    public Object onRetainNonConfigurationInstance() {
        return contact_read;
    }
    

    }

    0 讨论(0)
  • 2020-12-18 16:52

    The cause of this is that when you call nameCheckBox.setChecked() in code OnClickListener() awakes and run its code. I had the same problem an solved in just setting OnClickListener(null) before set a checkbox checked or not.

    0 讨论(0)
  • 2020-12-18 16:53

    nameCheckBox.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    isChecked[position_clicked] = position;
                    Log.d("position", String.valueOf(position));
                }
            });
    

    this code in add more one arre list in stores all position and add or remove both said fast add ,second remove. and used to list in position your other method

    0 讨论(0)
提交回复
热议问题