【问题标题】:Filtered listview highlighting incorrect item过滤的列表视图突出显示不正确的项目
【发布时间】:2016-06-09 12:40:37
【问题描述】:

我有一个列表视图,我在其中通过 SearchView 过滤项目。在激活一个项目的状态时,它没有得到正确的项目,而是从该位置获取它。为了更清楚,请参考以下截图:

  1. 搜索关键字 com 并选择过滤的项目(即激活状态)

  1. 在清除过滤器时,当项目的位置发生变化时,它不会跟踪所选项目,即 com.android.gesture.builder

无论位置如何变化,我都希望选择正确。

我在 MainActivity 中的代码:

 apps.setChoiceMode(apps.CHOICE_MODE_MULTIPLE_MODAL);
        apps.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {


                if (apps.isItemChecked(position)) {


                    Adapter.getItem(position);
                    Toast.makeText(getApplicationContext(), "CHECKED", Toast.LENGTH_LONG).show();

                    count = count + 1;
                    mode.setTitle(count + "items selected");


                    list_apps.add(Adapter.filteredData.get(position).packageName);



                    list_apps.trimToSize();

                }

                else {
                    Toast.makeText(getApplicationContext(), "UNCHECKED" , Toast.LENGTH_LONG).show();


                    count--;
                    mode.setTitle(count + "items selected");

                    list_apps.remove(Adapter.filteredData.get(position).packageName);


                    list_apps.trimToSize();

                }

我正在使用扩展的 baseAdapter,如果您也需要查看该代码,请告诉我。

更新:

我在代码中有 OnItemClick 监听器:

    apps.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                    long arg3) {
/*
                for (int i = 0; i < packageList.size(); i++) {
                    TextView txtview = ((TextView) arg1.findViewById(R.id.textView1));

                    product = txtview.getText().toString();

                    list_apps.add(Adapter.filteredData.get(arg2).packageName);



                    //Toast.makeText(MainActivity.this, product,
                    //      Toast.LENGTH_SHORT).show();
                    //for
                }
                */
                String selection;
                selection = Adapter.filteredData.get(arg2).packageName;

                 string = (String) Adapter.getItem(arg2);

                //list_apps.trimToSize();
                Toast.makeText(MainActivity.this, selection,
                        Toast.LENGTH_SHORT).show(); 

                                                         I am using activated_state for the item selected on filtering and maintaining that selection.

【问题讨论】:

    标签: android listview filter selection


    【解决方案1】:

    您可以在您的适配器中创建一个函数 getVisibleArray(),然后从您的 onItemClickListener 中调用它。

    在 setOnClickListener 中:

    People personInFocus = (People) adapter.getVisibleArray().get(position);

    在适配器中:

    public ArrayList<People> getVisibleArray() { return mDisplayedValues; }

    你的过滤数组是哪个。

    我已经测试过了,它可以工作。

    【讨论】:

      【解决方案2】:

      如果我没有弄错,那么您需要使用 OnItemClick lisenter,并获取这样的项目。

      搜索视图更改列表项的位置,但是当我们从适配器获取我们的项目时,它会返回当前项目。

      lv.setOnItemClickListener(new OnItemClickListener()
         {
            @Override
            public void onItemClick(AdapterView<?> adapter, View v, int position,
                  long arg3) 
            {
                  SString itemName = (String) adapter.getAdapter().getItem(position);
      
                  // assuming string and if you want to get the value on click of list item
                  // do what you intend to do on click of listview row
            }
         });
      

      【讨论】:

      • 嗨 Himanshu,我在最底部的原始帖子中添加了 OnItemClick 的更新。我正在使用activated_state,它让我可以在列表视图中选择多个项目。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2012-11-21
      • 2012-05-09
      • 2013-10-26
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多