繁体   English   中英

Android,ListView,ArrayAdapter和格式文本

[英]Android, ListView, ArrayAdapter and formatting text

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

  • 具有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()方法。 项目对象的名称(字符串类型)现在为“ <i>名称</ i>”

Item类中的setName()方法:

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

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

itemName.setText(item.name);

如果按原样保留上面的代码,则单击列表中的项目时,名称将更改为:“ <i>名称</ i>”。

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

". But when I try that like this: 但是,从那里我需要将字符串“ <i> name </ i>转换为html结果,即” “。但是当我这样尝试时:

itemName.setText(Html.fromHtml(item.name).toString());

它只是跳过html标签并正常显示名称字符串。

为什么fromHtml在这里不起作用?

为了进行比较,我尝试以相同的方式仅在我的应用程序(页脚)中设置另一个TextView的内容,即:

footerview.setText(Html.fromHtml("<i><font color='#123456'>text</font></i>"));

而且效果很好。 但是沿着路径的某个地方,围绕物品名称的标签丢失了。 这很奇怪,因为在ItemArrayAdapter类中,当我不尝试从html转换时,标记在那里。 在同一位置使用fromHtml方法时,它们只是不被接受。

有任何想法吗?

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

如何使用另一种方法?

如你所说

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

  • 一个具有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);


});

很简单?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM