リストビューにいくつかの場所を表示するアプリに取り組んでいます。すべてのリストビュー項目には、場所 (ホテル、バーなど) を指す矢印があります。
問題は、ビューをローカルにキャッシュせずに、この矢印を効率的に更新し続ける方法がわからないことです (これは、Google I/O ビデオによると、私が決してすべきではないことです)。
矢印は、電話の向きセンサー イベントごとに更新する必要があります。これは 1 秒間に何回も行われます。
すべてのイベントで notifyDataSetChanged() を呼び出し、すべてのリスト項目データを再設定するよりも良い方法はありますか?
更新(@dharanおよび興味のある人向け):
現在フルタイムの仕事をしているため、このプロジェクトへの取り組みを停止しましたが、解決策を考えました (未実装/未テスト)。
最初に回転角度を固定ステップ (例: 5、10、15、20、... 355、360) に制限し、負荷の高い画像回転計算を避けるために、回転角度ごとに回転した画像をキャッシュします (ただし、より高いメモリ コスト)。
その後、すべてのデータではなく画像のみを更新するタイミングを getView() メソッドに知らせます。私の場合、これは次のように簡単です。
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView != null && place[position].id == (Integer)convertView.getTag()){
//the place information is already set correctly so just update the image
}
...
}
これらの変更の後、notifyDataSetChanged() を呼び出しても重大なパフォーマンスの問題が発生することはないと思います。