2010-12-19 15 views
1

アイブ氏は、これまでのところ、これを使用:Androidの開発:リストビューの画像

setListAdapter(new ArrayAdapter<String>(this,R.layout.list, R.id.label, names)); 

たList.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" android:layout_width="match_parent"> 

    <ImageView android:id="@+id/icon" 
    android:layout_height="wrap_content" 
    android:src="@drawable/icon" 
    android:layout_width="22px" 
    android:layout_marginTop="15px" 
    android:layout_marginRight="4px" 
    android:layout_marginLeft="4px"> 
     </ImageView> 

    <TextView android:text="@+id/TextView01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
     android:id="@+id/label" android:textSize="35px"></TextView> 



</LinearLayout> 

しかし、私の質問は、私はすべての項目を一意にする方法です動作します(私はたくさんあります画像をR.drawableに)

私は犬の絵が欲しいアイテムの犬と猫のアイテムは、猫になるだろう。これですべてのアイテムがデフォルトのアプリアイコンになりました。

ありがとうございました!

+0

気になるものは、ArrayAdapterを拡張したカスタマイズされたクラスを使用して、getViewメソッドで異なる行に異なるイメージを指定することができます。 –

+0

これはあなたの質問に関連しない提案ですが、寸法を定義する際にピクセルを使用しないようにしてください。あなたの意見は、画面密度の異なるさまざまなデバイス間でうまく調整されません。そのためには、常にspを使ってテキストにして、他のすべてにディップしてください。 – jagsaund

+0

okありがとうございます@私はspを使用する必要がありますか? dp? – carefacerz

答えて

1

現在の実装では、名前データオブジェクトのテキストデータをテキストビューにバインドする必要があります。イメージ・ビューが正しいイメージを表示しない理由は、アダプタがイメージ・ビューと通信する方法がないためです。配列アダプタの基本となる実装はlist.xmlビューを膨らませ、そのlist.xmlからR.id.labelが表すビューを取り出します。そのビューがテキストビューかイメージビューかをチェックします。どちらでもない場合は、例外がスローされます。次に、名前データオブジェクトのデータをテキストビューにバインドします。

カスタムアダプタを指定し、名前の文字列とイメージリソースへの参照を保持するようにデータモデルを指定する必要があります。その場合は整数になります。ここで

はあなたのために働くかもしれないサンプルNameオブジェクトです:

public class Name 
{ 
    private String _name; 
    private int _imageResourceId; 

    public void Name(String name, int resId) 
    { 
     _name = name; 
     _imageResourceId = resId; 
    } 

    public void setImageResId(int resId) 
    { 
     _imageResrouceId = resId; 
    } 

    public void setName(String name) 
    { 
     _name = name; 
    } 

    public int getImageResId() 
    { 
     return _imageResourceId; 
    } 

    public String getName() 
    { 
     return _name; 
    } 
} 

は、クラスを作成し、BaseAdapterを拡張することによって開始し、など

getViewメソッド、getPosition、同様にgetCountを実装ここでサンプルアダプタですそれはあなたのためによく働くかもしれない:

public class NameAdapter extends BaseAdapter 
{ 
    private Name[] _data; 
    private LayoutInflater _inflater; 

    public NameAdapter(Context context, Name[] data) 
    { 
     _data = data; 
     _inflater = LayoutInflater.from(context); 
    } 

    public int getCount() 
    { 
     if(_data != null) 
     { 
      return _data.length; 
     } 
     else 
     { 
      return 0; 
     } 
    } 

    public Object getItem(int position) 
    { 
     if(_data != null) 
     { 
      return _data[position]; 
     } 
     else 
     { 
      return null; 
     } 
    } 

    public long getItemId(int position) 
    { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     ViewHolder holder = null; 

     if(convertView == null) 
     { 
      convertView = _inflater.inflate(R.layout.list, parent); 
      holder = new ViewHolder(); 
      holder._image = (ImageView) convertView.findViewById(R.id.icon); 
      holder._label = (TextView) convertView.findViewById(R.id.label); 

      convertView.setTag(holder); 
     } 

     if(holder == null) 
     { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder._image.setImageResource(_data[position].getImageResourceId()); 
     holder._label.setText(_data[position].getName()); 
    } 

    static class ViewHolder 
    { 
     TextView _label; 
     ImageView _image; 
    } 

} 

*注:私はあなたがこのビットを微調整する必要がありますこれをテストしていません。あなたは「setCompoundDrawable」または「setCompoundDrawablesWithIntrinsicBounds」を使用し、本当にあなたのレイアウトを最適化することができますのTextViewで

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/label" 
    android:textSize="16sp" /> 

:私はあなたのList.xmlの変更を示唆している最適化なども

、。複合ドロアブルを使用すると、テキストビューの左または右または上または下にイメージを配置できます。さらなる実装の詳細については、APIドキュメントをご覧ください。

希望に役立ちます!

+0

ありがとうございます、いくつかのエラーがありました、私にあなたがこれを見つけたリンクを教えてください。 – carefacerz

関連する問題