Android,ListView,ArrayAdapter和格式化文本

时间:2012-09-10 14:18:04

标签: android android-listview android-arrayadapter

我正在尝试完成以下任务:

  • 带有textview行的ListView
  • 当我点击某个项目时,文字会变为斜体

对斜体的改变可能是另一回事 - 重点是以某种方式改变文本。

我想使用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()方法。项目对象的名称(类型字符串)现在是“&lt; i&gt; name&lt; / i&gt;”

Item类中的setName()方法:

public void setName (String nname) { this.name = nname; }

现在,在ArrayAdapter类(ItemArrayAdaper.java)中,名称在ListView的TextView行中设置:

itemName.setText(item.name);

如果我保留上面的代码,单击列表中的项目时,名称将更改为:“&lt; i&gt; name&lt; / i&gt;。

到目前为止,这是我的预期。

但是,从那里我需要将字符串“&lt; i&gt; name&lt; / i&gt;”转换为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方法时,他们并不称赞。

有什么想法吗?

并且,我知道可能有更好的方法来做到这一点,我也会对此感兴趣: - )

2 个答案:

答案 0 :(得分:1)

不同的方法怎么样?

如你所说

  

我正在尝试完成以下任务:

     
      
  • 带有textview行的ListView。

  •   
  • 当我点击某个项目时,文字会变为斜体

  •   

简单地说,初始化:

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();

        ((TextView)view).setTypeface(null, Typeface.ITALIC);


});

够简单吗?

答案 1 :(得分:0)

简易解决方案:删除toString()。我没有尝试过,因为我之前遇到过问题,认为传递给TextView HAS的数据是纯字符串。但是,它的工作方式就像没有toString()的魅力: - )