Как я могу создать иконки для пунктов меню в Android ListView? - PullRequest
22 голосов
/ 13 ноября 2008

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

Ответы [ 2 ]

17 голосов
/ 04 декабря 2008

Что я обычно делаю для 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's id...);

     return view;
}
1 голос
/ 27 ноября 2008

Из документов Google для ArrayAdapter.

Чтобы использовать что-то кроме TextViews для отображения массива, например, ImageViews, или иметь некоторые данные кроме того toString () результаты заполняют представления, переопределить getView (int, View, ViewGroup), чтобы вернуть тип представления ты хочешь.

...