2008-11-13 3 views
20

Я использую ListView для отображения главного экрана приложения.
Главный экран по существу является menu, чтобы войти в различные разделы приложения. В настоящее время у меня есть ListView, содержимое которого программно добавляется в метод onCreate.Как создать иконки для элементов меню в ListView от Android?

Вот фрагмент кода, который делает это:

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

ответ

15

Что я обычно делаю для 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; 
} 
+12

Обратите внимание, что вам действительно стоит посмотреть на convertView и только надуть новые строки, если они вам действительно понадобятся. Если convertView не является нулевым, это какая-то предыдущая строка, которую вы накачали раньше, до утилизации. Просто сбросьте значок и верните переработанную строку. Меньше мусора, быстрее выполняется. – CommonsWare 2009-07-10 01:58:28

1

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

Чтобы использовать что-то другое, чем TextViews для отображения массива, например, ImageViews, или иметь некоторые данные , кроме ToString() Результаты заполнения представления, переопределить GetView (Int, View, ViewGroup), чтобы вернуть тип вида , который вы хотите.

Смежные вопросы