【问题标题】:Get original ID from filtered Listview从过滤的 Listview 中获取原始 ID
【发布时间】:2015-12-17 21:59:29
【问题描述】:

我有一个可以放入 StringArray 的类,它会显示带有搜索框的列表以过滤内容。我的应用程序很容易每个字段都有一个集合 ID。但是,当我搜索一个值时,ID 会变为过滤列表。有没有办法从原始列表中获取 id,这样即使在过滤后的列表中,我也可以使用 9、14 而不是 0、1、2....

 lv1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , searchItems));
    ed.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(Editable s) {
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {

            textlength = ed.getText().length();
            arr_sort.clear();
            for (int i = 0; i < searchItems.length; i++) {
                if (textlength <= searchItems[i].length()) {
                    if (ed.getText().toString().equalsIgnoreCase((String) searchItems[i].subSequence(0, textlength))) {
                        arr_sort.add(searchItems[i]);
                    }
                }
            }

            lv1.setAdapter(new ArrayAdapter<String>(Rest_Search.this, android.R.layout.simple_list_item_1, arr_sort));
//                lv1.smoothScrollToPosition(20);
        }
    });
    lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView parent, View v,
                                int position, long id) {
//                String a = parent.getItemAtPosition(position);
//                menuID = (int) id;

            int a = (int) parent.getAdapter().getItemId(position);
//                menuID = (int) parent.getAdapter().getItemId(position);
            Toast.makeText(Rest_Search.this,  ""+a, Toast.LENGTH_SHORT).show();

【问题讨论】:

    标签: android listview search filter


    【解决方案1】:

    您可以自定义您的adapter。创建一个新的Class 扩展BasaAdapter 并覆盖getItemId 方法:

    @Override
        public long getItemId(int position) {
            return items[position].getID();
        }
    

    然后在onItemClick 使用项目ids。

    【讨论】:

    • 这行得通,但它确实给了一些问题。感谢您的快速回复
    【解决方案2】:

    在您的自定义适配器中使用 getItemId(pos)

    您可以获取 pos 覆盖 View.OnClickListener() 的 onClick 方法

    这里是一个例子

        private View.OnClickListener mOnAddContactClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final int position = mListView.getPositionForView(view);
            Log.v(JBOOK,"original id "+getItemId(position));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多