1

Android でフルスクリーンのビデオ フィードを作成しようとしています。

を使用することにしListView、各項目はTextureViewです。全画面表示であるため、特定の瞬間に常に 1 つのアイテムしか表示されません。
が利用可能になったらTextureView、 を作成MediaPlayerし、サーフェスでビデオを再生します。それはかなりうまくいきます。

リストの一番下に到達すると、サーバーからさらにデータを読み込みます。新しいデータがロードされたら、notifyDataSetChanged()of myを呼び出し、BaseAdapter表示されている各アイテムのビューを再作成します。

問題は、現在のビデオが「点滅」することです (ビューが再作成されると、ビデオが消えてから再び表示されます)。

この問題を解決する方法がよくわかりませんListView。データセットが変更されると、常にアイテム ビューが再作成されます。ビデオアイテムのリストを表示するので、ここではa を使用するのListViewが正しい解決策だと思いますが、間違った道を進んでいる可能性があります...

  • この点滅を止める方法は?ListView(現在のアイテムのビューを再作成しないように指示する方法はありますか?)
  • 以外のものを使用する必要がありListViewますか? はいの場合、何を見ればよいですか?

ありがとう。

4

1 に答える 1

1

ビュー ホルダー パターンを使用する必要があります。あなたの場合、現在表示されているビデオの ID をホルダーに追加します。これにより、すでにビデオが表示されている場合、convertView を変更せずに返すことができます。

アイデアを示す(テストされていない)コードのサンプルを次に示します。

public View getView (int position, View convertView, ViewGroup parent) {
    Holder holder;
    if(convertView != null) {
         holder = (Holder) convertView.getTag();
         if(holder.displayedContent == getContentToDisplay(position)) {
             // the view we were asked to convert is already displaying 
             // the good video, no need to change anything to it !
             return convertView; 
         } else {
             // convert the view by displaying the new video
         }
    } else {
        // create a new view !
    }
}

private static class Holder {
    int displayedContent;
    // + references to the views
}
于 2015-01-13T11:09:56.300 に答える