0

ListViewでArrayAdapterを使用しています。

ArrayListをArrayAdapterに設定しているときに、そのすべてのオブジェクトが再作成されるのか、それとも単に参照するのか、本当に理解できません。

何らかの理由で、リストビューでも同じであると想定される同じオブジェクトは、現在のオブジェクトが他のオブジェクトのクローンであるかのように、プロパティの変更の影響を受けません。

誰かがそれをクリアしてくれませんか?

4

3 に答える 3

1

に渡すArrayListと、ArrayAdapter実際にはPass- byReferenceを使用してオブジェクトを操作します。

また、の内容をArrayList変更し、それらの変更をに反映させたい場合は、アダプタのメソッドArrayAdapterを呼び出す必要があります。notifyDataSetChanged()

PS:実際には、ArrayListの複製されたオブジェクトをアダプターに渡す必要があります(何をしているのかわからない場合)。これは不要であり、余分なリソースを必要とするためです。

詳細情報

于 2012-09-04T15:13:27.460 に答える
0

を作成する方法によって異なりますArrayAdapter

配列を受け取らない、またはListパラメーターとして使用しないバージョンのコンストラクターを使用すると、各アダプターインスタンスが維持する新しいリストが作成されます。次のいずれかのバージョンでアダプタを作成する場合:

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

次に、同じ外部リストを複数のアダプターに提供し、データセットを1回だけ変更できます。この場合、アダプターはリストを参照するだけで、データをコピーしないためです。

于 2012-09-04T15:14:03.437 に答える
0

どちらの場合も可能です。ここでは、2番目のケースがリストビューの最適化にどのように役立つかを説明します:http: //developer.android.com/training/improving-layouts/smooth-scrolling.html

于 2012-09-04T15:31:03.450 に答える