【问题标题】:Add two values to AutocompleteTextview Adapter向 AutocompleteTextview 适配器添加两个值
【发布时间】:2017-02-28 15:53:36
【问题描述】:

到目前为止,我正在尝试在 autoCompleteTextView 中显示联系人列表,但我需要使用与名称相关的contact_id 如何将id 与名称绑定?

我已经使用 hashmap 来存储联系人列表。

这是我的联系代码并将其添加到hashmap

        Cursor cursor_number=getActivity().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);
        if(cursor_number!=null){

            if (cursor_number.moveToFirst()){
                do{
                    contact_id=cursor_number.getString(cursor_number.getColumnIndex(ContactsContract.Data._ID));
                    if(Integer.parseInt(cursor_number.getString(cursor_number.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0) {
                        Cursor cursor_number1 = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                null,
                                ContactsContract.Data.CONTACT_ID + " = ? ", new String[]{contact_id}, null);
                        if (cursor_number1 != null) {
                            while (cursor_number1.moveToNext()) {
                                String name=cursor_number1.getString(cursor_number1.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
                                String id=contact_id;
                                HashMap<String, String> contact_data=new HashMap<String, String>();
                                contact_data.put(id,name);
                            }
                            cursor_number1.close();
                        }
                    }

                }

                while (cursor_number.moveToNext());
                cursor_number.close();
            }
        }

这就是我将适配器添加到 autoComplete textView 的方式

    autoCompleteTextView =(AutoCompleteTextView) this.getActivity().findViewById(R.id.act_network_auto_search);
    autoCompleteTextView.setThreshold(2);
    checkContacts();
    Collection<String> collection=contact_data.values();
    String[] array= collection.toArray(new String[collection.size()]);
    adapter = new ArrayAdapter<String>(getContext(),
            android.R.layout.simple_dropdown_item_1line,array);
    autoCompleteTextView.setAdapter(adapter);

我应该如何获得与name关联的id

任何帮助都会很棒!

更新:

LinkedHashMap<String, String> contact_data=new LinkedHashMap<String, String>();
contact_data.put(id,name);

【问题讨论】:

  • 为此创建自定义适配器。
  • @DheerubhaiBansal 我应该继续使用 Hashmap 还是使用 Arraylist?
  • 你应该使用 ArrayList 和 bean 类。

标签: java android autocomplete textview


【解决方案1】:

检查这个例子AutocompleteTextView

【讨论】:

    【解决方案2】:

    如果您必须使用键值对,则 我建议使用 Hasmap 的 LinkedHashMap,因为 hashmap 没有排序。

    您可以将数据放入与 hashmap 相同的linkedhasmap 中,如下所示

    LinkedHashMap<String,String> lH = new LinkedHashMap<String,String>();
    lH.put(id,name);
    

    在您的自动完成文本视图中执行以下操作

    autoCompleteTextView.setOnItemClickListener(new OnItemClickListener() {
    
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int pos,
                long id) {
                String key = (new ArrayList<String>(lH.keySet())).get(pos);
                you will have your id in key
           }
    });
    

    你也可以通过从listner中初始化lH.keySet来提高效率 也看看这个 http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html 对于 LinkedHashMap

    【讨论】:

    • 它返回我想要访问的位置 id
    • 你试过了吗?我相信您会在 clicklistner 的关键变量中获得 id。因为我首先获取您的linkedhashmap 的键集并获取您选择的位置,然后在您在自动完成的文本视图中选择的那个位置获取键/ID。
    • 可以分享一下代码吗?所以我可以找到问题
    • String key = (new ArrayList&lt;String&gt;(contact_data.keySet())).get(position); String selection = (String)parent.getItemAtPosition(position); 我在使用调试器后搜索了联系人姓名Warden,它给出了这个响应1: Warden
    • 在调试器中,关键变量中有什么,选择变量中有什么。你可以分享你设置linkedlisthashmap的代码吗?你在这段代码中使用过linkedlisthasmap吗?
    【解决方案3】:

    如果您确定名称是唯一的,您可以从 contact_data 获取 id

    public String getIdByName(String name) {
        for (Entry<String,String> entry : contact_data.entrySet()) {
            if (name.equals(value, entry.getValue())) {
                return entry.getKey();
            }
        }
        return null;
    }
    

    也检查一下answer

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      相关资源
      最近更新 更多