如何在Android的ListView中为菜单项创建图标?

Mic*_*old 23 icons android listview menu

我用a ListView来显示我的应用程序的主屏幕.
主屏幕基本上是menu进入应用程序的不同部分.目前,我已经ListViewonCreate方法中以编程方式添加了其内容.

以下是执行此操作的代码段:

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());
}
Run Code Online (Sandbox Code Playgroud)

所以菜单基本上只是一堆节点,文本包含在mainItems数组中.我知道我可以创建一个XML布局(即R.layout.mainMenu_item),其中包含ImageView和TextView,但我不确定如何设置ImageView的图标.我已经看到有一个setImageResouce(int resId)方法,但是在使用ArrayAdapter生成时使用它的方法让我望而却步.有一个更好的方法吗?

jas*_*ins 17

我通常为ListView做的是通过扩展方便的BaseAdapter类来实现我自己的Adapter.您将实现的抽象方法之一是getView(),如前面提到的海报.从那里你可以膨胀一个包含ImageView的布局,使用findViewById获取它的引用,并将图像设置为你添加到资源中的任何drawable.

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您确实应该查看convertView,并且只有在真正需要时才会对新行进行膨胀.如果convertView不为null,那么它是您之前充气的过去的一行,用于回收.只需重置图标并返回回收的行.创建更少的垃圾,更快的执行. (12认同)