从过滤后的Listview中获取原始ID

时间:2015-09-21 09:03:57

标签: android listview search filter

我有一个可以放入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();

2 个答案:

答案 0 :(得分:1)

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

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

然后在onItemClick中使用商品id s。

答案 1 :(得分:0)

在您的自定义适配器中使用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));