我正在尝试完成以下任务:
- 一个 ListView,带有 textview 行
- 当我单击一个项目时,文本变为斜体
斜体的改变可以是别的东西——重点是以某种方式改变文本。
我想使用 Html.fromHtml,因为在格式化文本时很容易处理。但是,我无法让它在我的设计中工作。
在我的主要活动中,我像这样创建和访问 ListView 和 ArrayAdapter:
lv = (ListView) this.findViewById(R.id.itemslist);
我有一个创建/更新适配器的方法,以便我可以更新列表的内容:
private void displayList () {
adapter = new ItemArrayAdapter(getApplicationContext(), R.layout.item_listitem, items);
lv.setAdapter(adapter);
adapter.setNotifyOnChange(true);
}
我的 OnItemClickListener:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ShoppingListApp02Activity.this, "List item selected:" +
items.get(position).getId(), Toast.LENGTH_LONG).show();
items.get(position).setName("<i>" + items.get(position).getName() + "</i>");
displayList();
});
如您所见,在选择/单击项目时,我将由 html 标记包围的项目名称发送到 Item 类的 setName() 方法。项目对象的名称(字符串类型)现在是“<i>name</i>”
Item 类中的 setName() 方法:
public void setName (String nname) { this.name = nname; }
现在,在 ArrayAdapter 类 (ItemArrayAdaper.java) 中,名称设置在 ListView 的 TextView 行中:
itemName.setText(item.name);
如果我保持上面的代码不变,当单击列表中的项目时,名称会更改为:“<i>name</i>.
到目前为止,这和我预期的一样。
但是,从那里我需要将字符串“<i>name</i>”转换为 html 结果,即“ name ”。但是当我这样尝试时:
itemName.setText(Html.fromHtml(item.name).toString());
它只是跳过html标签并正常显示名称字符串。
为什么 fromHtml 在这里不起作用?
为了比较,我尝试以相同的方式在我的应用程序(页脚)中设置另一个 TextView 的内容,只需:
footerview.setText(Html.fromHtml("<i><font color='#123456'>text</font></i>"));
这工作得很好。但是在路径的某个地方,项目名称周围的标签丢失了。这很奇怪,因为在 ItemArrayAdapter 类中,当我不尝试从 html 转换时,标签就在那里。在同一个地方使用 fromHtml 方法时,它们只是不被尊重。
有任何想法吗?
而且,我知道可能有更好的方法来做到这一点,我也会对此感兴趣:-)