Подтвердить что ты не робот

Как создать иконки для элементов меню в 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 ускользает от меня. Есть ли лучший способ сделать это?

4b9b3361

Ответ 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), чтобы вернуть тип вида вы хотите.