过滤后获取ArrayAdapter中的所有项目

时间:2016-10-13 10:40:39

标签: java android android-arrayadapter

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

我有一个由// Scoping function to avoid creating globals (function() { var target = document.getElementById('target'); var titles = [ 'Test 1', 'Test 2', 'Test 3', 'Test 4', 'Test 5' ]; newTitle(); document.getElementById("btn").addEventListener("click", newTitle, false); function newTitle() { var i = (Math.random() * titles.length) | 0; target.innerText = titles[i]; } })(); // Execute the scoping function 支持的AutoCompleteTextView。建议列表在运行时更改。为了使更改持久,我需要获取适配器中所有项的列表。做这个的最好方式是什么?我是否需要遍历列表以获取所有元素?

上述问题中的方法1(保留对支持列表的引用)不起作用,因为根据source,在过滤ArrayAdapter后创建改为原始列表的副本并对其进行操作,ArrayAdapter项到适配器不再更改后备列表。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

  3. 清除适配器过滤器,然后获取整个数据集。这也不是很好,但它确实有效。我不知道您的应用的用例,因此我不知道清除过滤器是否有任何副作用。

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

    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);