2016-10-13 2 views
0

Похожие вопросы: Getting all of the items from an ArrayAdapterПолучение всех элементов в качестве ArrayAdapter после фильтрации

У меня есть AutoCompleteTextView подкреплённый ArrayAdapter. Список изменений предложений во время выполнения. Чтобы изменения были постоянными, мне нужно получить список всех элементов в адаптере. Каков наилучший способ сделать это? Нужно ли мне перебирать список, чтобы получить все элементы?

Способ 1 в вышеуказанном вопросе (сохраняя ссылку на список основы) не работает, потому что в соответствии с source, после фильтрации ArrayAdapter создает копию исходного списка и работает на нем вместо этого, и add что элементы адаптера больше не изменяют список поддержки.

Использование BaseAdapter не применяется, так как для AutoCompleteTextView требуется адаптер Filterable.

ответ

0

Как я понимаю ваш вопрос, ваши варианты:

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

Но после очистки фильтра вам все еще нужно зацикливаться и вызвать 'getItem' для извлечения списка? –

+0

@TonyBetaLambda - Да –