ListViewまたはGridViewがスクロール中に古いアイテムを使用したのはなぜですか?私は、リストビューで表示している500以上の製品リストビューを持っています。各リストアイテムには4つの列があり、最後の列にはステータスがアクティブまたは非アクティブであるImageViewがあります。 ImageViewをアクティブとしてマークするたびに、定期的にスクロールした後、すべての項目が自動的にImageViewをアクティブとして変更しました。 Android ListViewとGridViewがスクロール中に変更されたアイテムを繰り返す
iは第六項目をクリックして、スクロール時に私は私はあなたがgetViewメソッド内viewholder使用していると思うように12日、18日、24日ともアクティブ答えて
スクロールエクスペリエンスを最適化するために、ListView
およびGridView
はアイテムビューを再利用して、すべてのリストアイテムのビューを拡張/インスタンス化する必要がなくなります。
だからこそ、getView
のパラメータは、View
というconvertView
というパラメータを持っています。 convertView
がヌルの場合は、アイテムの新しいビューを展開する必要があります。それがヌルでない場合は、このビューを再利用してインフレーションのオーバーヘッドを回避できることを意味します。
欠点は、この「リサイクル」されたアイテムビューは、最後に表示されたときにその中にゴミが入り、リストアイテムと一致するようにビュー内のすべてをリセットする必要があるということです。
新しいAndroidデベロッパーがよく見かける間違いは、ビュー内のすべてのモデル表現を持たないことです。たとえば、リスト項目がアクティブまたは非アクティブのステータスを表示できる場合、リスト項目のモデルはboolean
というプロパティ(mActive
)を持っているはずです。
ListView
がリスト項目を再表示する必要があると判断すると、リストのモデルは常に現在のリストの状態を保持していなければなりません。
だから、あなたが何をする必要があるか基本的に4つのものである:
はあなたのリスト項目のモデルにプロパティを追加します。
boolean mActive; // this can be private with getter/setter
状態を変更するためのアダプターメソッドを作成します。例:
public void toggleItemActive(int position) { mListItem.get(position).mActive = ! mListItem.get(position).mActive; notifyDataSetChanged(); }
ここで
notifyDataSetChanged()
を呼び出すことは非常に重要です。あなたのgetView
オーバーライドでこのプロパティを使用した:あなたのイベントハンドラからプロパティを設定し
imageView.setImageResource(item.mActive ? R.drawable.active : R.drawable.inactive); // or however you are doing it
:今
listView.setOnItemClickListener(new OnItemClickListener) { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { MyAdapter adapter = (MyAdapter) parent.getAdapter(); adapter.toggleItemActive(position); } });
あなたListView
が正しくリスト項目が表示されます。
ように変更していることがわかりアクティブとしてそのImageViewのを作る場合としましょう()カスタムアダプターのメソッド。ビューホルダーを使用しているときは、ビューを再利用します。あなたの説明のように、あなたのデバイスは一度に6つのリスト項目をdiaplyすることができます。したがって、6番目、12番目(6番目の位置+ 6番目の画面)、18番目(12番目の位置+ 6番目の画面)、24番目のものなどはすべて同じビューを使用します。したがって、6番目のアイテムが変更されると、関連する12番目、18番目、24番目のアイテムなども変更されます。
- 1. GridViewアイテムの色がAndroid上でOnScrollを繰り返すか?
- 2. android listviewスクロール時の項目を繰り返す
- 3. ListViewの繰り返しのアイテム(写真)
- 4. Android - GridViewのアイテムが中心
- 5. Recyclerの表示アイテムの色の変更スクロール後に繰り返す
- 6. ListView内のRelativeLayoutにビューを追加すると、繰り返しのアイテムが返されます
- 7. Gridviewがスクロールするとそのビューが変更される
- 8. Xamarin ListView BindingContextアイテムが変更されたときのイベント
- 9. Android RecyclerView - スクロールの変更アイテム
- 10. wpf listview/gridview:繰り返し内容を隠す
- 11. DragDropイベント中にListView内のフォーカスされたアイテムを変更する方法は?
- 12. Android - アイドル中にアラームを繰り返す
- 13. ListViewのすべてのアイテムを繰り返し処理する - Android
- 14. Androidリストビューアイテムが繰り返されます
- 15. コードが繰り返されないときに繰り返す
- 16. スクロールするとuitableviewデータが繰り返される
- 17. GridView CustomGrid Adapterはアイテムを繰り返します
- 18. 複数のアイテムがAndroid ListViewでスクロールされて選択されます
- 19. ASP.net:ページング後にGridViewの列が繰り返される
- 20. Androidファイルが繰り返される
- 21. Android:ボタンとテキストをlistViewで繰り返す
- 22. 無限の繰り返しアイテムを表示しているGridview
- 23. Androidが毎日繰り返すアラームが正しく繰り返されない
- 24. android listviewスクロールを使わずにアイテムを表示させる
- 25. ListViewアイテムがGridViewカラムにレンダリングされていない
- 26. リサイクルモードでListView仮想化の値が繰り返されます
- 27. AlertDialogのListViewが繰り返されます
- 28. カスタムListViewの最初の3つの要素が繰り返し表示され、スクロール時に位置が変更されます
- 29. ListView画面の向きが変更されたときリストにDublicateアイテムが追加されました
- 30. Android:1つのListViewアイテムのImageViewを変更すると、他のListViewアイテムの同じImageViewが変更されますか?