0

リストビューに画像を追加しようとしていますが、次のエラーが発生しました:

You must supply a resource ID for a TextView

これはメニュー レイアウトの menu.xml です。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/sahovnica"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MenuActivity" >

<ImageView
    android:id="@+id/imageView_Menu_Title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:contentDescription="@string/app_name"
    android:src="@drawable/vh_title" />

<ListView
    android:id="@+id/listView_Menu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/imageView_Menu_Title" >

</ListView>

これは list_item.xml です。

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

<ImageView
    android:id="@+id/imageView_List_Item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:contentDescription="@string/app_name"
    android:src="@drawable/ic_launcher" />

</RelativeLayout>

そして、これは私のコードです:

public class MenuActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu);

    ListView list = (ListView)findViewById(R.id.listView_Menu);

     Bitmap[] images = { decodeImage(R.drawable.igraj), 
                             decodeImage(R.drawable.rezultati),
             decodeImage(R.drawable.postavke),
             decodeImage(R.drawable.pomoc), decodeImage(R.drawable.izlaz)};

     ArrayAdapter<Bitmap> adapter = new ArrayAdapter<Bitmap>(this, R.layout.list_item,
                                                                     images);

     list.setAdapter(adapter);

}

private Bitmap decodeImage(int res) {
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),res);               
    return bitmap;      
}

}

ArrayAdapter にいくつかの文字列を入れて、list_item.xml に TextView をアイテムとして入れようとしたが、それでもうまくいかなかったので、それが何を意味するのか (エラー) はわかりませんが、理由はわかりません。前もって感謝します。

4

3 に答える 3

0

ArrayAdapterドキュメントから:

デフォルトでは、このクラスは、提供されたリソース ID が単一の TextView を参照することを想定しています。より複雑なレイアウトを使用する場合は、フィールド ID も受け取るコンストラクターを使用します。そのフィールド ID は、より大きなレイアウト リソースの TextView を参照する必要があります。

[...]

配列表示に TextView 以外のもの (ImageView など) を使用したり、toString() の結果以外のデータをビューに表示したりするには、getView(int, View, ViewGroup) をオーバーライドして、必要なビューのタイプを返します。

BaseAdapter独自の実装を作成するか、独自のArrayAdapterサブクラスとオーバーライドを作成する必要がありますgetView()

画像を使用する単純なgetView()ものは次のようになります。

@Override
public View getView (int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
    row = inflater.inflateR.layout.list_item, parent, false);

    return row;
}
于 2013-10-18T16:36:46.187 に答える
0

のドキュメントからArrayAdapter:

A concrete BaseAdapter .......to use a more complex layout, use the constructors that also takes a field id. That field id should reference a TextView in the larger layout resource.

ご覧のとおりTextView、R.layout.list_item が参照するレイアウト ファイルに を含める必要があります。ImageViewそのレイアウトにはしかありません。

より複雑なビュー ( に限定されない ) についてはTextView、独自のBaseAdapter.

于 2013-10-18T16:36:54.763 に答える