1

我想要一个 ListView ,它使用 显示每个项目的名称和信息simple_list_item_2,所以它看起来像这样:

SWITZERLAND
a country with many delicious cheeses

BRITAIN
famous for its clocktower

AUSTRALIA
in Australia, everything is upside down!

大写的文本表示每个 ListView 元素中的大黑色文本,而较低的大写文本表示该元素的灰色小字体。

但是,我希望用户能够添加他自己的国家,所以第一个元素会显示为

ADD NEW COUNTRY...

没有任何小字体。我可以使用simple_list_item_2并简单地将小文本设置为"",但这会使大文本笨拙地对齐。我希望这个特殊的“添加新国家”元素看起来与simple_list_item_1.

simple_list_item_1但是,使用or的决定simple_list_item_2是在我的适配器的初始化中做出的:

MyAdapter adapter = new MyAdapter(
            this,
            android.R.layout.simple_list_item_2, 
            myListOfListViewElements);

然后当我填充 ListView 时,这个决定就实现了:

myListView.setAdapter(adapter);

那么如何在一个 ListView 中同时使用这两种 simple_list_item 呢?

4

2 回答 2

0

对于您只处理一个“特殊”项目的特定情况,@dymmeh 的答案绝对是一种很好且易于实施的方法。对于更通用的情况,您需要处理不一定位于顶部的多个不同项目ListView,您可以参考适配器中的以下两种方法:

  • getItemViewType(int position)
  • getViewTypeCount()

根据第一个方法的返回值,Android 将convertView在适配器的getView(...)方法中为您提供所需的内容。一种常见的方法是简单地将布局 id 作为类型(例如R.layout.row_layout)返回,但您可以真正使用您喜欢的任何东西,只要这些值唯一地标识一个类型。

之后,在构建 ViewHolder/RowWrapper 时,您需要做一些额外的工作来填充正确的布局。对于每种视图类型,如果convertView == null. 将至少有一种视图类型(这是默认情况),最多getViewTypeCount(). 可以在此处找到说明该想法的示例

有关视图类型方法的更多详细信息:

附带说明:我实际上考虑不将 'add...' 选项作为 的一部分ListView,而是将其放置在它的顶部或上方,以便于访问;即无需先滚动回顶部。

于 2012-10-31T02:06:47.877 回答
0

您始终可以通过在调用 / 之前调用“添加新国家/地区”addHeaderView(View view)作为标题ListView视图。将 onClick 侦听器附加到该标题视图以捕获任何点击setAdapter(adapter)setListAdapter(adapter)

这样,您的“添加新国家/地区”将显示为列表视图中的第一个条目

于 2012-10-31T00:30:33.913 回答