2011-07-16 10 views
1

私は別の記事を読んで、私の解決策は見つけられませんでした。私はカスタムListViewを作成しました。このリストの各アイテムは、複合アイテムで、ImageViewと2つのTextViewsを含んでいます。アダプターが適用され、リストがいっぱいになると、ImageViewの中の画像を変更したいのですが、クリックイベントでは発生しないようにします。ListViewの内部で画像を変更するにはどうすればよいですか?

private class ListAdapter extends ArrayAdapter<RSSItem> { 

    private List<RSSItem> items; 

    public ListAdapter(Context context, int textViewResourceId, List<RSSItem> items) { 
     super(context, textViewResourceId, items); 
     this.items = items; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_item, null); 
     } 
     RSSItem item = items.get(position); 
     if (item != null) { 
      ImageView image = (ImageView) v.findViewById(R.id.ivImage); 
      TextView title = (TextView) v.findViewById(R.id.tvTitle); 
      TextView description = (TextView) v.findViewById(R.id.tvDescription); 
      if (image != null) { 
       Drawable d = getResources().getDrawable(R.drawable.icon); 
       image.setTag(item.getImageURL()); 
       image.setBackgroundDrawable(d); 
      } 
      if (title != null) { 
       title.setText(item.getTitle()); 
      } 
      if (description != null) { 
       description.setText(item.toString()); 
      } 
     } 
     return v; 
    } 
} 

私はコンテキストを取得しようとしましたが、その後、私は正しいImageViewのにアクセスする方法がわかりません。 私は助けていただきありがとうございます!

+0

あなたはどのような条件に基づいて変更したいですか? – Stephan

+0

** AsyncTask **が終了した後。 – nenito

答えて

3

RSSItemクラスにフィールドを追加して、どの画像を表示するかをアダプタに指示します。 AsyncTask.onPostExecuteメソッドでは、その値を変更し、のnotifyDataSetChangedメソッドを呼び出します。

あなたのgetView()オーバーライドでは、表示する画像を選択するためにRSSItemに入れた値を使用する必要があります。 notifyDataSetChanged()に電話すると、それぞれの項目について再度呼び出されます。

2

あなたArrayAdapter内の画像の遅延ロード

あり、これを行う方法についての完全なコード例を示した偉大なチュートリアルオンラインだ、とあなたは複数回の画像をダウンロードしないように、また、キャッシュが含まれます。さらに

SHELVESアンドロイドアプリケーション、またarrayadapter用画像のマルチスレッド、遅延読み込み及びキャッシングの例を持っているGoogleのエンジニアのいずれかで書かれた無料のオープンソースアプリ。 I 非常にこのコードを読むことをお勧めします。

1

あなたは、アダプタのgetViewメソッド()関数の外からのImageViewのを変更したい場合は、これを試みることができます。

List<View> listOfViews = new ArrayList<View>(); 
listView1.reclaimViews(listOfViews); 
for (View v : listOfViews) 
{ 
    ImageView image = (ImageView)v.findViewById(R.id.image); 
    image.setBackgroundDrawable(drawable); 
} 
関連する問題