2011-07-06 6 views
0

ListViewのItem内にあるImageViewのソースを設定しているときに問題があります。次のような問題は次のとおりです。ListViewのItemLayoutにImageViewソースを設定中の問題

私のXML LayoutFileで私はImageViewのとのTextViewを持っているのListItemのために:私の解像度で

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:paddingLeft="10dp" 
android:orientation="horizontal"> 

<ImageView android:id="@+id/actionState" 
    android:layout_width="12dp" 
    android:layout_height="12dp" 
    android:layout_gravity="center_vertical" 
    android:src="@drawable/check_lightgrey" 
    android:layout_marginRight="5dp"/> 

<TextView android:id="@+id/actionText" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    /> 

</LinearLayout> 

/私は2つのファイルがcheck_lightgrey.pngとcheck_green.png持って引き出し可能フォルダ。 ArrayAdapterを使用してListViewを描画すると、すべてのListItemがcheck_lightgrey.pngで構成され、その後に対応するテキストが正しく表示されます。

ListView listView = getListView(); 
listView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      ImageView imageView = (ImageView) v.findViewById(R.id.actionState); 
      imageView.setImageResource(R.drawable.check_green); 
     } 
    }); 
:私は私のListActivityで私setOnItemClickListenerの

コードをcheck_green.pngするcheck_lightgrey.pngからこのリストアイテムのImageViewのソースを変更したいのListItemをユーザーがクリックするとこのようになります

Listが完全でなくてスクロールが必要でない限り、これは問題なく動作します。 ListItemをスクロールする必要があるListItemがたくさんある場合、ListItemをクリックするとバグがあります:クリックされたListItem内のImageViewのソースだけでなく、表示されないListItemのImageViewのソース彼らは現在の見解から外れています。

それは少し混乱に聞こえるが、私は例を与える:

  • あなたが最初の13件のアイテム
  • を見ることができ、スクロールせずにリストビュー
  • で56個の項目がありますが、今項目1をクリックしてください - > ImageViewのソースがアスペクトとして変更されました
  • これまで表示されていなかった2番目のアイテム(アイテム15)のImageViewのソースをスクロールダウンしました
  • 同じことがそれですEM 29および項目43
  • とあなたは景観へのデバイスのoriantationを変更するときと同じ効果が存在する14

の差が常にある見ることができるように。変化する唯一のものは7の違いです。

私は結論を探しましたが、何も見つかりませんでした。もし誰かが私を助けたり、私にヒントを与えることができれば、それはうれしい。

挨拶

答えて

1

まず、バグではありません。これは、ListViewがより速くなるためにビューをリサイクルしようとしているために発生します。したがって、行の1つのイメージを変更するには、リストの背後にあるデータを変更する必要があります。アダプタを更新し、notifyDataSetChangedに電話してください。

+0

お返事ありがとうございます。あなたは正しい、バグではない、それは私のせいだ。私はあなたが何を意味しているのか理解していますが、私のonItemClickハンドラでv.findViewById()を呼び出すよりImageViewを取得する別の方法がわかりません。どのようにImageViewのソースを変更するには? – phwa4563

+0

どのような種類のアダプタを使用していますか? 'ArrayAdapter'? 'CursorAdapter'?カスタム 'BaseAdapter'? – Cristian

+0

私は、TextDataを保持する 'String []'配列に 'ArrayAdapter'を使用します。しかしこれは、レイアウトを構築してテストする最初のプロトタイプにすぎません。この 'ListActivity'の最終バージョンでは、各ListItemの' TextView'のためのデータは、データベースからの 'CursorAdapter'を介して来ます。しかし、 'ImageView'は上記のバージョンと同じです。 'ArrayAdapter'を拡張した独自のアダプタを作成し、getView()メソッドをオーバーライドすると便利でしょうか? – phwa4563

関連する問題