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
}
}
アダプタは 'myAdapterClass.notifyDataSetChanged()'で動作するはずです。 – TychoTheTaco
@TychoTheTacoしかし、私はできない点があります。なぜなら、現在のDeafultArrayは現在のinchargeではないからです。FilteredArrayを使用していて、filterArrayのインデックスが異なる場合は、Deafultarrayのインデックス –
を参照してください。次に 'DefaultArrayList' 'FilterredArrayList'からオブジェクトを取得し、' DefaultArrayList.remove(object) 'を呼び出します。 – TychoTheTaco