【问题标题】:Getting all the items in an ArrayAdapter after filtering过滤后获取 ArrayAdapter 中的所有项目
【发布时间】:2016-10-13 10:40:39
【问题描述】:

相关问题:Getting all of the items from an ArrayAdapter

我有一个 AutoCompleteTextView 支持一个 ArrayAdapter。建议列表在运行时更改。为了使更改持久,我需要获取适配器中所有项目的列表。做这个的最好方式是什么?我是否需要遍历列表以获取所有元素?

上述问题中的方法1(保留对后备列表的引用)不起作用,因为根据source,过滤ArrayAdapter后会创建原始列表的副本而是对其进行操作,并且 adding 向适配器发送项目不再更改后备列表。

使用BaseAdapter 也不适用,因为AutoCompleteTextView 需要Filterable 适配器。

【问题讨论】:

    标签: java android android-arrayadapter


    【解决方案1】:

    据我了解您的问题,您的选择是:

    1. 扩展基本适配器并提供您自己的过滤。这可能是最好的,但需要最大的努力。

    2. 管理与适配器列表并行的列表,向两个列表添加和删除项目。这很容易,但跟踪重复数据对我来说似乎很脏。

    3. 清除适配器过滤器,然后抓取整个数据集。这也不漂亮,但它有效。我不知道您的应用的用例,所以我不知道清除过滤器是否有任何副作用。

    这个例子给适配器设置了一些字符串,当用户按下一个按钮时,它会清除过滤器,然后获取项目总数。此时,您可以遍历适配器项来检索所有这些项。

    List<String> stringList = new ArrayList<>();
          stringList.add("hello");
          stringList.add("hell");
          stringList.add("help");
          stringList.add("heck");
          stringList.add("dude");
          adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, stringList);
          AutoCompleteTextView ac = (AutoCompleteTextView)findViewById(R.id.auto_complete);
          ac.setThreshold(1);
          ac.setAdapter(adapter);
    
          FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
          fab.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                Filter f = adapter.getFilter();
                f.filter("", new Filter.FilterListener() {
                   @Override
                   public void onFilterComplete(int count) {
                      int count2 = adapter.getCount();
                      mainText.setText("Count is: " + count);
                      adapter.add("hellraiser");
                   }
                });
             }
          });
    
          mainText = (TextView) findViewById(R.id.main_text);
    

    【讨论】:

    • 但是清除过滤器后,是否还需要循环调用getItem检索列表?
    • @TonyBetaLambda - 是的
    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    相关资源
    最近更新 更多