0

次のタスクを達成しようとしています。

  • テキストビュー行を含む 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>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>"));

そして、それはうまくいきました。しかし、パスのどこかで、アイテム名を囲むタグが失われています。これは奇妙です。なぜなら、html から変換しようとしないときの ItemArrayAdapter クラスには、タグが存在するからです。同じ場所で fromHtml メソッドを使用すると、それらは受け入れられません。

何か案は?

そして、おそらくこれを行うためのより良い方法があることを知っており、それにも興味があります:-)

4

2 に答える 2

1

別のアプローチはどうですか?

あなたが言ったように

私は次のタスクを達成しようとしています:

  • テキストビュー行を含む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);


});

簡単ですか?

于 2012-09-10T14:58:01.530 に答える
0

簡単な解決策: toString() を削除します。TextView に渡されるデータは純粋な文字列である必要があると考えて、以前に問題があったため、それを試しませんでした。ただし、 toString() がなくても魅力のように機能します:-)

于 2012-09-10T14:51:13.090 に答える