Как создать иконки для элементов меню в 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 ускользает от меня. Есть ли лучший способ сделать это?
Ответы
Ответ 1
Что я обычно делаю для ListView, так это реализовать собственный адаптер, расширив класс BaseAdapter. Один из абстрактных методов, которые вы реализуете, будет 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 id...);
return view;
}
Ответ 2
Из документов google для ArrayAdapter.
Чтобы использовать что-то, кроме TextViews для отображения массива, например, ImageViews или иметь некоторые данные кроме того, результаты toString() заполняют views, override getView (int, View, ViewGroup), чтобы вернуть тип вида вы хотите.