ブラウズ フラグメント内の行データの一部を再ロードしたいと考えています。
基本的に、ブラウズフラグメントでフラッシュのような効果を引き起こすことなく、アダプターデータをリセットしたいと考えています。どのようにそれを行うことができますか?
notifyDataSetChanged()
リストビューのようなもの。
ありがとう
ブラウズ フラグメント内の行データの一部を再ロードしたいと考えています。
基本的に、ブラウズフラグメントでフラッシュのような効果を引き起こすことなく、アダプターデータをリセットしたいと考えています。どのようにそれを行うことができますか?
notifyDataSetChanged()
リストビューのようなもの。
ありがとう
これにより、現在の位置を失うことなくデータが更新されます。
for (int i = 0; i < mAdapter.size(); i++) {
ListRow listRow = ((ListRow) mAdapter.get(i));
ArrayObjectAdapter listRowAdapter = ((ArrayObjectAdapter) listRow.getAdapter());
if (listRowAdapter.size() > 0) {
listRowAdapter.notifyArrayItemRangeChanged(0, listRowAdapter.size());
}
}
私はこの質問で似たようなことを答えました: リストにカードを動的に追加する 行の Android TV リーンバック
そこから私の答えをコピーします。うまくいけば、これが役に立ちます。
プレゼンターにアイテムを追加するには;
CardPresenter channelCardPresenter = new CardPresenter();
ArrayObjectAdapter channelRowAdapter = new ArrayObjectAdapter(channelCardPresenter);
channelRowAdapter.add(new Movie("Movie Title"));
HeaderItem header = new HeaderItem(0, "My Channels");
mRowsAdapter.add(new ListRow(header, channelRowAdapter));
もちろん、これは UI を初めて作成する場合にのみ機能します。将来はこれができないかもしれません。私のアプリCumulusTVでは、アプリを完全に再描画するたびに呼び出されるメソッドを作成します。
public void refreshUI() {
prepareBackgroundManager();
setupUIElements();
loadRows(); //Generate and populate all the rows
setupEventListeners();
}
独自のアダプタを作成し、新しい replaceAll() メソッドを追加できます。
public void replaceAll(Collection items){
int itemsCount = items.size();
if (itemsCount == 0){
return;
}
mItems.clear();
mItems.addAll(index, items);
notifyItemRangeChanged(0, itemsCount);
}
完全なソース:リンク