web-dev-qa-db-ja.com

Android ListViewでメニュー項目のアイコンを作成するにはどうすればよいですか?

ListViewを使用してアプリケーションのメイン画面を表示しています。
メイン画面は基本的にmenuで、アプリケーションのさまざまなセクションにアクセスできます。現在、私はListViewを持っており、その内容はonCreateメソッドでプログラムによって追加されます。

これを行うコードスニペットは次のとおりです。

String[] mainItems = {
    "Inbox", "Projects", "Contexts", "Next Actions"
}

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);

    setListAdapter(new ArrayAdapter<String>(
            this, Android.R.layout.simple_list_item_1, mainItems));
    registerForContextMenu(getListView());
}

したがって、メニューは基本的に、mainItems配列に含まれるテキストを含むノードの集まりにすぎません。 XMLレイアウトを作成できることを知っています(つまり、R.layout.mainMenu_item)ImageViewとTextViewが含まれていますが、ImageViewのアイコンを設定する方法がわかりません。 setImageResouce(int resId)メソッドがあることを確認しましたが、ArrayAdapterを使用して生成するときにこれを使用する方法がわかりません。これを行うためのより良い方法はありますか?

23
Michael Herold

ListViewで通常行うことは、便利なBaseAdapterクラスを拡張して独自のアダプターを実装することです。実装する抽象メソッドの1つは、前に述べたようにgetView()です。そこから、ImageViewを含むレイアウトを膨らませ、findViewByIdを使用してそのレイアウトへの参照を取得し、リソースに追加したドローアブルに画像を設定できます。

public View getView(int position, View convertView, ViewGroup parent) {

    View row = inflater.inflate(R.layout.menu_row, null);

     ImageView icon = (ImageView) row.findViewById(R.id.icon);
     icon.setImageResource(..your drawable's id...);

     return view;
}
17
jasonhudgins

ArrayAdapterのGoogleドキュメントから。

配列表示にTextViews以外のもの(ImageViewsなど)を使用する場合、またはtoString()結果以外のデータの一部をビューに入力するには、getView(int、View、ViewGroup)をオーバーライドして、必要なビューのタイプを返します。

1
Feet