使用ArrayAdapter / SimpleAdapter在ListView上使一个项加粗

时间:2012-09-23 16:14:06

标签: android listview

我正在尝试创建一个简单的ListView。 ListView上显示的项目只是我拥有的数组中的字符串。只有那个我只希望其中一个字符串以粗体显示。 首先,当我在ScrollView中使用包含所有带换行标记的字符串的长TextView时,我可以简单地使用

<b> </b>

在字符串周围我希望在gui上以粗体显示,这样:

TextView tv.setText(Html.fromHtml(str));

但是在ScrollView中使用一个大的TextView会导致其他问题,并且当你完全拥有ListView时,这似乎是一个糟糕的选择。所以现在我使用ListView,它从ArrayList获取所有字符串并显示它们。只有当我试图扭转这一局面时,我似乎无法将一个项目的风格改为Bold。我还尝试为每个字符串创建一个TextView,然后将TextView添加到List中,但我不知道ArrayAdapter或SimpleAdapter是否可以执行此操作。 SimpleAdapter似乎只能将TextView作为资源ID获取,这对于列表中的所有项目都是相同的,这使我无法实现我想要的目标。

长话短说:在研究了这个问题之后,我知道有一些方法可以扩展BaseAdapter以获得一个自定义适配器,它允许列表的任何自定义布局,但是真的没有办法吗?我是否真的需要实现一个BaseAdapter和@override getItem才能使一个项目变为粗体?这对我来说似乎很奇怪。有谁知道我可以添加TextViews到ListView的方式?使用ArrayAdapter显示TextViews toString:/
如果您知道另一种简单的方式来展示一个大胆的项目,我会真的很高兴任何帮助。谢谢!

3 个答案:

答案 0 :(得分:5)

好吧,我终于决定通过制作扩展ArrayAdapter的自定义适配器来解决这个问题。那里有很多例子,但是在我看来,其中一些例子提供了很多额外内容并使这个问题复杂化,我只是想解决这个问题。我发现this example非常有用和友好,在我的研究中我看到很多开发人员提出类似的问题,所以我真的希望这对你有所帮助。

扩展ArrayAdapter的适配器并不太复杂,而且允许您以相当简单的方式完全按照您的方式使用它。完成适配器后,您只需将html标记添加到源数组中的特定字符串,并在适配器上绑定它们时,使用Html.fromHtml。这就是我解决它的方式。
如果有人知道是否有办法在ListView上的不同特定项目中制作粗体或彩色文本而无需自己进行此调整(扩展ArrayAdapter并覆盖getItem()),请与我们分享。
我希望这有助于其他人。

答案 1 :(得分:1)

getView函数内,引用TextView之类的内容:

text = (TextView) convertView.findViewById(R.id.textBox);

然后:

text.setTypeface(null, Typeface.BOLD);

你已经完成了。

答案 2 :(得分:1)

覆盖ArrayAdapter的getView(...):

public View getView(int position, View convertView, ViewGroup parent) {
  View returnedView = super.getView(position, convertView, parent);

  if (position == specialPosition) {
    TextView text = (TextView) returnedView.findViewById(R.id.text);
    text.setTypeface(null, Typeface.BOLD);
  }

  return returnedView;
}