こんにちは私はfregement.iのリサイクラービューとsearchviewを実装したアプリケーションを開発しています。 しかし、テキストを1つずつ削除すると、すべてのリストが空になります。最後に表示することができます。searchview with recyclerビューが正常に動作しない
は、ここで私は問題はfilter
方法のif (text.isEmpty()) {
ブロックであると思い、私のfragement
こんにちは私はfregement.iのリサイクラービューとsearchviewを実装したアプリケーションを開発しています。 しかし、テキストを1つずつ削除すると、すべてのリストが空になります。最後に表示することができます。searchview with recyclerビューが正常に動作しない
は、ここで私は問題はfilter
方法のif (text.isEmpty()) {
ブロックであると思い、私のfragement
から私のコードです。
ここでは、plistarray
リストをクリアし、plistarray.addAll(のためのあなたの元データリストを追加するこの代わりにplistarray.addAll(plistarray);
にその空のリストを追加します)。これで空リストの問題が解決されます。
これを覚えておいてください。検索を実行する際は、まずアダプターのコンストラクターで元のリストのダミー/コピーを作成し、このダミーを使用してデータを復元してください。
希望すると、これで問題は解決します。
私の主な問題は、List
を操作していることです。アダプターにはデータが入っていますが、元のデータセットの「コピー」はありません。あなたは継続的にあなたがplistarray
をクリアして、再度レコードを検索するために同じを使用しているfilter()
方法でここにplistarray
をという名前の単一array
上で動作している
ArrayList<ProductList> plistarray; // these are instance variables
ArrayList<ProductList> plistarrayCopy; // in your adapter
// ...
public void filter(String text) {
if (plistarrayCopy == null) {
plistarrayCopy = new ArrayList<>(plistarray);
}
if (text.isEmpty()) {
plistarray.clear();
plistarray.addAll(plistarrayCopy);
plistarrayCopy = null;
} else {
text = text.toLowerCase();
ArrayList<Device> filteredList = new ArrayList<>();
for (ProductList pList : plistarrayCopy) {
if (pList.getPtitle().toLowerCase().contains(text)) {
filteredList.add(pList);
}
}
plistarray.clear();
plistarray.addAll(filteredList);
}
notifyDataSetChanged();
}
:
このような何かが動作するはず。あなたは使うアダプタあなたのためのいくつかの他のアレイを使用するのではなくplistarray
public void filter(String text) {
if (text.isEmpty()) {
plistarray.clear();
plistarray.addAll(plistarray);
} else {
ArrayList<ProductList> result = new ArrayList<>();
text = text.toLowerCase();
//after clearing the array again you are using same array to find the items from
for (ProductList item : plistarray) {
if (item.getPtitle().toLowerCase().contains(text)) {
result.add(item);
}
}
//you have cleared all the contains here
plistarray.clear();
// and added only result related items here
plistarray.addAll(result);
}
notifyDataSetChanged();
}
なければならない[この](https://gist.githubusercontent.com/pskink/cd3bbdd742b5b1905a790c76831b5d85/raw/89a41acded0889028be48e1f669562046cf66126/MatchableRVArrayAdapte%2520(純粋%2520RecyclerView% )generic adapter – pskink