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を使用して生成するときにこれを使用する方法がわかりません。これを行うためのより良い方法はありますか?
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;
}
ArrayAdapterのGoogleドキュメントから。
配列表示にTextViews以外のもの(ImageViewsなど)を使用する場合、またはtoString()結果以外のデータの一部をビューに入力するには、getView(int、View、ViewGroup)をオーバーライドして、必要なビューのタイプを返します。