如何在Android中从ArrayList填充的列表视图中选择多个项目

将军

我正在尝试编写一个程序以在我填充的列表视图中选择多个项目。但是我很难选择多个项目。请让我知道该怎么做。贝娄是我如何填充数组列表,我有一个带有复选框的自定义行。我需要获取按钮单击事件上的选定项目(名称,编号)。先感谢您。我试图理解其他帖子,但是由于无法将它们与我的代码相关联,因此我不确定该怎么做。

public class Contactselect extends Activity {

    ListView lv;
    EditText et;
    int count;
    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
    String phoneNumber;
    String name;

    String Name = "Contact";
    String Phone = "Phonenumber";

    TextWatcher search;
    SimpleAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contacts);

        listcontacts();

        lv = (ListView) findViewById(R.id.contactlist);
        lv.setChoiceMode(lv.CHOICE_MODE_MULTIPLE);
        lv.setTextFilterEnabled(true);
        adapter = new SimpleAdapter(this, list, R.layout.row, new String[] {
                Name, Phone }, new int[] { R.id.names, R.id.numbers });

        lv.setAdapter(adapter);

        Button b = (Button) findViewById(R.id.done);
        b.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {

                String selected = "";
                int cntChoice = lv.getCount();

                SparseBooleanArray sparseBooleanArray = lv
                        .getCheckedItemPositions();
                for (int i = 0; i < cntChoice; i++) {
                    if (sparseBooleanArray.get(i)) {
                        selected += lv.getItemAtPosition(i).toString() + "\n";

                    }

                }

                Toast.makeText(Contactselect.this, selected, Toast.LENGTH_LONG)
                        .show();

            }
        });

        et = (EditText) findViewById(R.id.search);
        et.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub
                Contactselect.this.adapter.getFilter().filter(cs);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                    int arg2, int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub

            }
        });

    }

    private ArrayList<HashMap<String, String>> listcontacts() {
        // TODO Auto-generated method stub
        FileInputStream fis = null;
        try {
            fis = openFileInput("contacts.xml");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            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)));
                        name = String.valueOf(parser.getAttributeValue(0));
                        phoneNumber = String.valueOf(parser
                                .getAttributeValue(1));

                        Log.i(name, phoneNumber);
                        map.put(Name, name);
                        map.put(Phone, phoneNumber);

                        list.add(map);
                        count++;

                    }
                }
                try {
                    eventType = parser.next();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            Log.i("End document", "Ended" + count);
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }

}
哈雷什·切拉纳(Haresh Chhelana)

尝试这种方式,希望这将帮助您解决问题。

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;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android在列表视图中选择多个项目

如何在列表视图中选择项目

如何在Android中具有多个选择的自定义列表视图中获取选中的项目ID

如何在列表视图中选择多个单选按钮并使用其位置在arraylist中进行排列

如何从项目列表中选择滚动视图中的中心项目

在Android的列表视图中选择项目

如何在列表视图中选择行

如何在列表视图中选择字符串

Android Kotlin如何在多项选择列表视图中选中复选框

使用自定义适配器在列表视图中选择/突出显示多个项目-Android

如何从Android中的自定义列表视图中选择具有ID的TextView?

如何在回收站视图android中选择多个项目?

如何删除列表视图中的项目填充?

离子/如何在列表框中选择多个项目?

从列表视图中选择多个项目,然后单击按钮进行操作

如何在React Native中显示从列表中选择的多个项目

如何在多个视图中使用列表视图中的选定项目

如何在Android项目中选择多个图像/视频?

如何在java中的方法中选择多个项目

从Bootstrap中的列表中选择多个项目

如何在列表视图中删除项目

wpf-在从嵌套列表视图中选择项目时,还选择父列表视图

Fullcalendar:如何在实时视图中选择多个资源和日期

如何显示在列视图中选择的项目的描述?

如何在iPad的详细视图中选择默认项?(在拆分视图控制器中)

Flutter是否具有上下文操作栏,用于从列表视图中选择多个项目

在Android搜索视图中显示从建议列表中选择的内容

在列表视图中选择行时如何更改索引

如何在视图中选择模型的特殊索引?