У меня проблема с использованием фильтра с 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);
Заменить ** "\ п" ** 'dbfRecord.getString ("FW_NR") + "\ п" + dbfRecord.getString ("STANDORT1") + "\ п" + dbfRecord .getString ("ABLAGE") + "\ n" 'с **" \ n "** и попробуйте. –
awesome thanks :) Это сработало. Я думаю, это потому, что фильтр видит «\ nTest» вместо «Test» правильно? –
Да, из-за этого только. –