2016-06-20 6 views
1

leanbackライブラリを使用してAndroid TVに非常に多数のUI要素(1000s)を1つリストにしたいと考えています。私は現在、VerticalGridFragmentを拡張し、ArrayObjectAdapterを使用しています。私はバインディング(100個の要素)から始め、ユーザーがリストの最後までスクロールすると次の100個の要素をバインドしたいと考えています。この動作を実装する方法はありません。leanbackライブラリを使用してAndroid TVで大規模な単一リストを効率的に実装する方法

VerticalGridFragmentには、OnItemViewClickedListenerとOnItemViewSelectedListenerという2つのリスナーがあります。次の100要素のクエリを作成する前に、選択されているすべての項目を聴き続けるのは非常に高価です。

アイデア?ありがとう。

答えて

1

私は考えることができる2つのアプローチがあります。最初は、提案したように、選択した要素をチェックすることです。これは私の答えto this SO postに似ています。リスナー自体は高価ではなく、リスナーで軽量チェックを行っている限り、パフォーマンスにはほとんど影響しません。このアプローチの落とし穴は、タッチスクリーンデバイス(リーンバック実行中)の場合、スクロールだけではアイテムの選択が実行されないため、スクロール位置を選択できないことです。

オプション1:

final int FETCH_NEXT_THRESHOLD = 5; // or NUM_COLUMNS * 2 if it's a grid 
final ListRow listRow = (ListRow) row; 
final ArrayObjectAdapter currentRowAdapter = listRow.getAdapter(); 
int selectedIndex = currentRowAdapter.indexOf(item); 
if (selectedIndex != -1 && (currentRowAdapter.size() - index < FETCH_NEXT_THRESHOLD) { 
    // One of the last FETCH_NEXT_THRESHOLD items was selected. 
    // Trigger next page fetch now. 
} 

オプション2:

他のアプローチは、VerticalGridViewRecyclerViewによって支えられているという事実に依存しています。 this classのようなものを使用できます。これは、子要素の数と現在表示されている要素の数をチェックします。これは頻繁にヒットするため、パフォーマンスにさらに大きな影響を与えます(ただし、それでもなおマイナーな影響はあります)。これを達成するには、VerticalGridFragmentVerticalGridViewScrollListenerを追加します。これは、おそらくPresenterレベルで行う必要があります。

結論:実装が簡単であり、ほとんどのユースケースに対応しますので、私はオプション1をお勧めし

。しかし、リーンバックを実行するタッチスクリーンデバイスについて心配している場合は、オプション2と同様の方法を試してみてください。

+0

おかげさまで、両方のオプションを読んだ後、私はオプション1にも取り組んでいます。 – Vpd

関連する問題