【问题标题】:selecting multiple contacts using checkbox使用复选框选择多个联系人
【发布时间】:2012-09-12 12:39:03
【问题描述】:

我正在尝试为 android 创建一个应用程序。其中有一次我需要打开一个活动,我需要在listviewcheckbox 中显示用户手机上的所有联系人,以便可以选择多个联系人。我编写了一个代码,该代码当前显示了所有联系人的列表,但没有复选框,如您在所附图像中看到的那样。接下来,当用户使用checkboxclicks on DONE button 选择所需的联系人时,应在主活动中导出结果,并且用户选择的所有联系人应显示在EditText 中,如Frank <+911234567890>, John <+913456789012>, Ashley <+911237890456>,。我怎样才能实现我想要的?当前显示的破折号(-)也应该消失。

【问题讨论】:

标签: android android-contacts contact contactscontract


【解决方案1】:

使用以下命令在所有项目上添加复选框:

listView.setChoiceMode(CHOICE_MODE_MULTIPLE);

这不仅会为所有项目添加复选框,还会为您处理所有检查状态。您可以使用多种方法来获取项目的状态:

getCheckedItemCount()
getCheckedItemIds()
getCheckedItemPositions()

您可以使用setItemChecked() 以编程方式设置任何项目的选中状态。查看this tutorial 获取如何制作多选列表的指南。

【讨论】:

  • 当我检索字符串中的数字时,如何删除破折号 (-)?
【解决方案2】:

使用函数 split("-") 在每个 '-' 上拆分字符串,然后将其连接起来。

【讨论】:

    【解决方案3】:

    使用下面的代码sn-p从电话簿中检索所有联系人,将它们附加在包含复选框的ListView中以启用多选,它清晰明了。

    public class Display extends Activity implements OnItemClickListener{
    
    List<String> name1 = new ArrayList<String>();
    List<String> phno1 = new ArrayList<String>();
    MyAdapter ma ;
    Button select;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.display);
    
        getAllContacts(this.getContentResolver());
        ListView lv= (ListView) findViewById(R.id.lv);
            ma = new MyAdapter();
            lv.setAdapter(ma);
            lv.setOnItemClickListener(this); 
            lv.setItemsCanFocus(false);
            lv.setTextFilterEnabled(true);
            // adding
           select = (Button) findViewById(R.id.button1);
        select.setOnClickListener(new OnClickListener()
        {
    
            @Override
            public void onClick(View v) {
                    StringBuilder checkedcontacts= new StringBuilder();
    
                for(int i = 0; i < name1.size(); i++)
    
                    {
                    if(ma.mCheckStates.get(i)==true)
                    {
                         checkedcontacts.append(name1.get(i).toString());
                         checkedcontacts.append("\n");
    
                    }
                    else
                    {
    
                    }
    
    
                }
    
                Toast.makeText(Display.this, checkedcontacts,1000).show();
            }       
        });
    
    
    }
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub
         ma.toggle(arg2);
    }
    
    public  void getAllContacts(ContentResolver cr) {
    
        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        while (phones.moveToNext())
        {
          String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
          String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
          name1.add(name);
          phno1.add(phoneNumber);
        }
    
        phones.close();
     }
    class MyAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener
    {  private SparseBooleanArray mCheckStates;
       LayoutInflater mInflater;
        TextView tv1,tv;
        CheckBox cb;
        MyAdapter()
        {
            mCheckStates = new SparseBooleanArray(name1.size());
            mInflater = (LayoutInflater)Display.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return name1.size();
        }
    
        @Override
        public Object getItem(int position) {
    
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
    
            return 0;
        }
    
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View vi=convertView;
            if(convertView==null)
             vi = mInflater.inflate(R.layout.row, null); 
             tv= (TextView) vi.findViewById(R.id.textView1);
             tv1= (TextView) vi.findViewById(R.id.textView2);
             cb = (CheckBox) vi.findViewById(R.id.checkBox1);
             tv.setText("Name :"+ name1.get(position));
             tv1.setText("Phone No :"+ phno1.get(position));
             cb.setTag(position);
             cb.setChecked(mCheckStates.get(position, false));
             cb.setOnCheckedChangeListener(this);
    
            return vi;
        }
         public boolean isChecked(int position) {
                return mCheckStates.get(position, false);
            }
    
            public void setChecked(int position, boolean isChecked) {
                mCheckStates.put(position, isChecked);
            }
    
            public void toggle(int position) {
                setChecked(position, !isChecked(position));
            }
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            // TODO Auto-generated method stub
    
             mCheckStates.put((Integer) buttonView.getTag(), isChecked);         
        }   
    }   
    

    }

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多