2016-05-27 7 views
0

RecyclerViewSearchViewが含まれていますが、ユーザーはこのRecyclerViewのオブジェクトを削除できますが、ユーザーが何かを検索して結果からオブジェクトを削除すると、アクティブではないDefaultArrayListのオブジェクトを使用していますが、searchBarがアクティブのとき結果オブジェクトはFilteredArrayListという名前の別のArrayListに表示され、配列リストからアイテムを削除するとオブジェクトはDataBaseから削除されます。DefaultArrayListしたがって、検索が終了すると、同じ削除されたファイルがまだDefaultArrayListのままです。オブジェクトが存在しなくなったときにアダプタのデータソースに通知しました

なので、どのようにしてDefaultArrayListにもオブジェクトが存在しないことを通知するにはどうすればよいですか(これはまだDefaultArrayListにキャッシュされています)???

myAdapterClass.notifyDataSetChanged(); 

が、それは

+0

アダプタは 'myAdapterClass.notifyDataSetChanged()'で動作するはずです。 – TychoTheTaco

+0

@TychoTheTacoしかし、私はできない点があります。なぜなら、現在のDeafultArrayは現在のinchargeではないからです。FilteredArrayを使用していて、filterArrayのインデックスが異なる場合は、Deafultarrayのインデックス –

+0

を参照してください。次に 'DefaultArrayList' 'FilterredArrayList'からオブジェクトを取得し、' DefaultArrayList.remove(object) 'を呼び出します。 – TychoTheTaco

答えて

1

myAdapterClass.notifyDataSetChanged();がここでの問題ではない仕事をしていない:

さて、私はこれを試してみました。 FilteredArrayListDefaultArrayListの両方からアイテムを削除する必要があります。

問題のもう1つの解決方法は、ArrayListを1つだけ使用することです。 Adapterの内部にはFilterableインターフェイスが実装されています。詳細については、Filterable exampleを参照してください。

1

DefaultArrayListをデータソースとしてFilteredArrayListにコピーしてコピーするのはどうですか?擬似コードで:

またそれは delegatesまたは observersで実現することができる
View { 

    defaultList: DefaultArrayList; 

    showSearchBar() { 
     filteredList = new FilteredArrayList(this.defaultList); 
     ... 
     this.searchBar.show(filteredList); 
    } 

} 


FilteredArrayList { 

    FilteredArrayList(dataSource) { 
    this.dataSource = dataSource; 
    } 

    enumerator() { 
     ... 
     // filtered items enumeration from dataSource 
     ... 
    } 

    delete(item) { 
     this.dataSource.delete(item); 
     // also delete from filtered cache if needed 
    } 

} 

:あなたは通知ならば、 `DefaultArrayList.remove(インデックス)`とを呼び出すことによって、あなたはDefaultArrayList` `からそれを削除する必要があり

ListActionsDelegate { 

    onDelete(Item item); 

} 

View ... implements ListActionsDelegate { 

    defaultList: DefaultArrayList; 

    onDelete(Item item) { 
     this.defaultList.delete(item); 
    } 

    showSearchBar() { 
     filteredList = new FilteredArrayList(this.defaultList); 
     filteredList.delegate = this; 
     ... 
     this.searchBar.show(filteredList); 
    } 
} 

FilteredArrayList { 

    delegate: ListActionsDelegate; 

    FilteredArrayList(items) { 
    this.raw = items; 
    } 

    delete(item) { 
     super.delete(item); 

     if (this.delegate) 
     this.delegate.onDelete(item); // notify list actions delegate 
    } 

} 
関連する問題