2016-03-15 4 views
0

У меня проблема с использованием фильтра с ArrayAdapter.Android ArrayAdapter Filter не работает должным образом

У меня есть ListView, который публикуется с данными. Над ListView есть поле EditText, на котором есть TextChangeListener. При вводе последовательности символов, которая определенно встречается в ListView, при некоторых обстоятельствах ListView остается пустой после этого. Элементы в ListView отформатированы следующим образом:

FFI 01 Jacket 
Test, User 
Locker 101 
---------------- 
FFI 01 Helmet 
Test, User 
Locker 101 
---------------- 
FFI 02 Jacket 
Test, User2 
Locker 102 
---------------- 
. 
. 
. 

и так далее.

  • Если я ищу «FFI», «01», «02», «Куртка» или «Шлем», остаются только элементы с отфильтрованным текстом.
  • Если я ищу «User», «User2», «101» или «102», остаются только элементы с отфильтрованным текстом в нем.
  • Если я читаю «Test» или «Locker», ListView пуст.

Вот мой код:

TextChangeListener:

eText.addTextChangedListener(new TextWatcher() { 

@Override 
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
    // When user changed the Text 
    if (!cs.equals(null) || !cs.equals("") || !cs.equals(" ")) { 
     MainActivity.this.adapter.getFilter().filter(cs); 
    } 
} 

@Override 
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } 

@Override 
public void afterTextChanged(Editable arg0) {} 
}); 

Наполнение адаптер и ListView:

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/" + "AUSRUEST.DBF"); 
DbfIterator dbfIterator = DbfEngine.getReader(file, null); 
DbfHeader dbfHeader = DbfEngine.getHeader(file, null); 
int numCols = dbfHeader.getCountColumns(); 
int numRows = dbfHeader.getCountRecords(); 
arrayListView = new String[numRows][numCols]; 
int i=0; 
Set<String> set = new HashSet<String>(); 
while (dbfIterator.hasMoreRecords()) { 
    DbfRecord dbfRecord = dbfIterator.nextRecord(); 

    if (dbfRecord.getString("FW_NR") != null && !dbfRecord.getString("FW_NR").startsWith("?")) { 
     String setText = dbfRecord.getString("FW_NR")+"\n"+dbfRecord.getString("STANDORT1")+"\n"+dbfRecord.getString("ABLAGE")+"\n"; 
     setText = setText.replace("null", "---"); 
     set.add(setText); 
    } 

    arrayListView[i][0] = dbfRecord.getString("GRUPPE2"); 
    arrayListView[i][1] = dbfRecord.getString("FW_NR"); 
    arrayListView[i][2] = dbfRecord.getString("STANDORT1"); 
    arrayListView[i][3] = dbfRecord.getString("ABLAGE"); 
    //Date date = dbfRecord.getDate("date_val"); 
    String test = arrayListView[i][0]; 
    String test1 = arrayListView[i][1]; 
    String test2 = arrayListView[i][2]; 
    String test3 = arrayListView[i][3]; 
    System.out.println(arrayListView[i][0] + " " + arrayListView[i][1] + " " + arrayListView[i][2] + " "+ arrayListView[i][3]); 
    i++; 
} 
List<String> al = new ArrayList<String>(set); 
Collections.sort(al); 
System.out.println(" "); 
ListView lv = (ListView) findViewById(R.id.listView); 
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, al); 
lv.setAdapter(adapter); 
+0

Заменить ** "\ п" ** 'dbfRecord.getString ("FW_NR") + "\ п" + dbfRecord.getString ("STANDORT1") + "\ п" + dbfRecord .getString ("ABLAGE") + "\ n" 'с **" \ n "** и попробуйте. –

+0

awesome thanks :) Это сработало. Я думаю, это потому, что фильтр видит «\ nTest» вместо «Test» правильно? –

+0

Да, из-за этого только. –

ответ

0

Replace "\ п" dbfRecord.getString ("FW_NR") + "\ n" + dbfRecord.getString ("STAND ORT1") + "\ n" + dbfRecor d.getString ("ABLAGE") + "\ n" с "\ n" и попробуйте.

Ответа на этот вопрос Nigam Патро

Смежные вопросы