2017-07-26 7 views
0

私は高価な新しいものを膨らませるのではなく、listItemのリサイクルに関する記事や質問を読んでいます。特に私はthis questionを読んで答えを知ったが、私の質問は:リストをスクロールすると、上からいくつかのlistItemsが消えてリサイクルされ、リストの一番下に再び表示されるはずです。getViewは、リスト内のリサイクルconvertViewの位置をどのように決定するのですか?

アンドロイドは、その位置をどのように決定しますか? viewHolder = (ViewHolder)convertView.getTag;を使用すると、viewHolderはリサイクルしたい行を保持しています。viewHolder.txtName.setText(dataModel.getName());を使用してView Elementsを設定すると、その特定のviewHolderのElementsを更新するので、Listの一番下に移動します。

私はこの記事を非常に参考にしていますが、リサイクルを明確にするための十分な説明とコメントはありません。 Android ListView with Custom Adapter

+0

私はpisitionがメソッドに渡されます知っているが、それはリサイクル項目の位置ですか?それじゃない?このアイテムを再度使用したい場合は、その位置を変更してリストの一番下に移動する必要があります。それでアンドロイドはリストの最後にそれを積み重ねるだけですか? – MohsenFM

答えて

1

どのようにアンドロイドはそれらの位置を決定するのですか?

リストビュー・アダプタ(例えばArrayAdapter)をArrayAdapter.getView()有し、RecyclerViews等価特殊なアダプタはRecyclerView.Adapter.onBindViewHolder()あります。

// ListView 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
} 

// RecyclerView 
@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    ... 
} 

これは、ビューにスクロールされたリスト行positionであり、データを埋めるためにバインドする必要があります:彼らは両方とも彼らのメソッドのシグネチャでpositionパラメータを持っています。あなたはクリックイベントハンドラでは、たとえば、onCreateViewHolder()onBindViewHolder()方法の外にViewHolderのリスト行の位置を見つけることができるように

はさらに、RecyclerView.ViewHolderオブジェクトは、メソッドgetAdapterPosition()を持っています。

も参照してください:

+0

したがって、アンドロイドがリサイクルされたアイテムのgetViewを呼び出し、それを設定して返すと、アンドロイドはリストの最後にそれを置きます。申し訳ありませんが、これは私にとっては多少混乱しています。私はアンドロイドにはとても新しいので、あなたの忍耐力に感謝します。 – MohsenFM

+0

@MohsenFM Androidが 'getView()'を呼び出すと、リストの最後ではなく、正確に必要なリスト位置に行が置かれます。リストを上下にスクロールして行が画面外にある場合、後で行が削除され、ガーベッジ・コレクション(「リサイクル」)されます。しかし、そのテンプレートは保存されるので、新しいリスト行を同じデザインで表示することができます。しかし、リサイクルされた各行のデータを常に表示する必要があります。そうしないと、古いデータやグリッチが表示されます。 –

+0

ありがとう@ Mr-IDEあなたは私のためにそれをクリアしました。 – MohsenFM

関連する問題