1 回答

TA貢獻1875條經(jīng)驗 獲得超5個贊
目前還不清楚您的問題究竟是什么,但從我的想法來看:
每次用戶鍵入一個新字符時,
onTextChanged
都會觸發(fā)另一個事件,并且由于您沒有清除中間的適配器,顯然您的addTask
輸入會累積。afterTextChanged
被調(diào)用 afteronTextChanged
,因此如果您在填充適配器后立即清除它,它將最終為空。我不確定是notifyDataSetChanged
立即重繪 RecyclerView 還是將其排隊,但很可能另一個 notifyDataSetChanged 可能會在此期間adapter.clearAll
或其他地方潛入,讓您留下空視圖。您應該在重新填充之前立即清除適配器,而不是之后立即清除。您不需要
notifyDataSetChanged
在每個addTask
. 添加當前迭代的所有任務,然后調(diào)用notify...
一次。如果您繼續(xù)閱讀,
ontextChanged
您會看到,count
參數(shù)中僅顯示更改了多少個字符(或者更確切地說,當前鍵入的單詞或 smth 中有多少個字符),使用它來檢測是否CharSequence s
為空并不是最佳選擇。而是檢查CharSequence s
.
所以你需要做的是:
@Override
public void onTextChanged (CharSequence s, int start, int before, int count) {
if (s.length() == 0) { // if empty I show to user nothing
adapter.clearAll();
adapter.notifyDataSetChanged();
} else {
Cursor cursor = database.rawQuery("SELECT * FROM todo WHERE task LIKE '%" + String.valueOf(s) + "%'", null); // ask for data from database
adapter.clearAll();
if (cursor.moveToFirst()) { // if the response wasn't empty
do {
// add filter data in adapter and save adapter(notifyDataSetChanged();)
adapter.addTask(cursor.getString(cursor.getColumnIndex("task")));
} while (cursor.moveToNext());
}
cursor.close();
adapter.notifyDataSetChanged();
}
}
如果您的適配器按我的預期工作,那就應該這樣做。你永遠不表明您RecyclerView適配器,所以我不知道什么addTask和clearAll做。
添加回答
舉報