25

我正在使用 aListView来显示我的应用程序的主屏幕。
主屏幕本质上是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 数组中的文本。我知道我可以创建一个R.layout.mainMenu_item包含 ImageView 和 TextView 的 XML 布局(即),但我不确定如何设置 ImageView 的图标。我已经看到有一个 setImageResouce(int resId) 方法,但是在使用 ArrayAdapter 生成时使用它的方法让我望而却步。有一个更好的方法吗?

4

2 回答 2

18

我通常为 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;
}
于 2008-12-03T22:46:12.073 回答
1

来自 ArrayAdapter 的谷歌文档。

要使用除 TextViews 之外的其他内容来显示数组,例如 ImageViews,或者要让 toString() 结果之外的一些数据填充视图,请覆盖 getView(int, View, ViewGroup) 以返回所需的视图类型。

于 2008-11-26T23:43:43.347 回答