how to select multiple items in a listview populated from ArrayList in Android

后端 未结 1 923
情歌与酒
情歌与酒 2021-01-29 06:02

I am trying to write a program to select multiple items in the listview i populate. but I am having difficulty of selecting multiple items. Please let me know how to do it. Bell

相关标签:
1条回答
  • 2021-01-29 06:56

    Try this way,hope this will help you to solve your problem.

    public class Contactselect extends Activity {
    
        private ListView lv;
        private EditText et;
        private Button b;
        private int count;
        private String Name = "Contact";
        private String Phone = "Phonenumber";
        private String IsSelected = "isSelected";
        private ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    
        private ContactAdapter adapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            lv = (ListView) findViewById(R.id.contactlist);
            lv.setTextFilterEnabled(true);
            et = (EditText) findViewById(R.id.search);
            b = (Button) findViewById(R.id.done);
    
            listcontacts();
            adapter  = new ContactAdapter(this,list);
            lv.setAdapter(adapter);
    
    
            b.setOnClickListener(new Button.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    String selected = "";
                    for (HashMap<String,String> row : list){
                        if(row.get(IsSelected).equals("true")){
                            selected += row.get(Name) + "\n";
                        }
                    }
                    Toast.makeText(Contactselect.this, selected, Toast.LENGTH_LONG)
                            .show();
    
                }
            });
    
    
            et.addTextChangedListener(new TextWatcher() {
    
                @Override
                public void onTextChanged(CharSequence cs, int arg1, int arg2,int arg3) {
                    adapter.filter(cs.toString());
                }
    
                @Override
                public void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) {
    
                }
    
                @Override
                public void afterTextChanged(Editable arg0) {
    
                }
            });
        }
    
        private void listcontacts() {
            FileInputStream fis = null;
            try {
                fis = openFileInput("contacts.xml");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            try {
                XmlPullParserFactory factory;
    
                factory = XmlPullParserFactory.newInstance();
    
                factory.setNamespaceAware(true);
                XmlPullParser parser = factory.newPullParser();
                parser.setInput(new InputStreamReader(fis));
                int eventType = parser.getEventType();
                int o = 0;
                while (eventType != XmlPullParser.END_DOCUMENT) {
    
                    HashMap<String, String> map = new HashMap<String, String>();
    
                    // set flags for main tags.
                    if (eventType == XmlPullParser.START_DOCUMENT) {
    
                    } else if (eventType == XmlPullParser.START_TAG) {
                        String tag_name = parser.getName();
                        if (tag_name.contains("contacts")) {
                            // Log.i("tag",
                            // "name"
                            // + String.valueOf(parser
                            // .getAttributeValue(0))
                            // + "......................"
                            // + "number"
                            // + String.valueOf(parser
                            // .getAttributeValue(1)));
                            Log.i(name, phoneNumber);
                            map.put(Name, String.valueOf(parser.getAttributeValue(0)));
                            map.put(Phone, String.valueOf(parser
                                    .getAttributeValue(1)));
                            map.put(IsSelected,"false");
    
                            list.add(map);
                            count++;
    
                        }
                    }
                    try {
                        eventType = parser.next();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                Log.i("End document", "Ended" + count);
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }
    
        class ContactAdapter extends BaseAdapter {
    
            private Context context;
            private ArrayList<HashMap<String,String>> contacts;
    
            public ContactAdapter(Context context,ArrayList<HashMap<String,String>> contacts) {
                this.context =context;
                this.contacts =new ArrayList<HashMap<String, String>>();
                this.contacts.addAll(contacts);
    
            }
    
            @Override
            public int getCount() {
                return contacts.size();
            }
    
            @Override
            public Object getItem(int position) {
                return contacts.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                final ViewHolder holder;
    
                if (convertView == null) {
                    holder      = new ViewHolder();
                    convertView = LayoutInflater.from(context).inflate(R.layout.row, null);
                    holder.name      = (TextView) convertView.findViewById(R.id.name);
                    holder.numbers   = (TextView) convertView.findViewById(R.id.numbers);
                    holder.checkbox      = (CheckBox) convertView.findViewById(R.id.checkbox);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }
    
                holder.name.setText(contacts.get(position).get(Name));
                holder.numbers.setText(contacts.get(position).get(Phone));
                holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
                    @Override
                    public void onCheckedChanged(CompoundButton ButtonView, boolean isChecked) {
                        contacts.get(position).put(IsSelected, "" + isChecked);
                        for (HashMap<String,String> data : list){
                            if(data.get(Name).equals(contacts.get(position).get(Name))){
                                data.put(IsSelected,contacts.get(position).get(IsSelected));
                                break;
                            }
                        }
                        notifyDataSetChanged();
    
                    }
                });
    
                if (contacts.get(position).get(IsSelected).toString().equals("false")) {
                    holder.checkbox.setChecked(false);
                } else {
                    holder.checkbox.setChecked(true);
                }
    
                return convertView;
            }
    
            public void filter(String charText) {
                contacts.clear();
                if (charText.length() == 0) {
                    contacts.addAll(list);
                } else {
                    for (HashMap<String,String> contact : list) {
                        if (contact.get(Name).toLowerCase().contains(charText.toLowerCase())) {
                            contacts.add(contact);
                        }
                    }
                }
                notifyDataSetChanged();
            }
    
    
            class ViewHolder {
                TextView  name;
                TextView  number;
                CheckBox checkbox;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题