0

ListViewがすでにレンダリングされている場合(たとえば、onClickイベントによって起動された場合など)に正常に機能する次のコードがあります。

TextView tv = (TextView)list.getChildAt(position);  //list is my ListView
if (tv!=null) {
    tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}

ただし、アクティビティが復元されているとき(ローテーション後、再起動...)、このSTRIKE_THRU_TEXT_FLAGフラグをListViewの一部のアイテムに適用する必要がある場合があります。このコードをonCreateメソッドまたはonStartメソッドで実行しようとすると、ListViewアイテムがまだ表示されていないため、nulllist.getChild(position)が返されます(実際、この時点では画面が黒く、実際の描画は後の関数で行われるようです)。 これを回避する簡単な方法はありますか?たぶん、 getChild関数はこの場合には最適ではありません...または、ListViewのレンダリング関数をオーバーライドして機能させますか(私にはやり過ぎのようです)?ありがとう

4

1 に答える 1

0

ビュー自体をそのように変更しないでください。そのリストアイテムを表す実際のデータオブジェクトを変更します(たとえば、ListViewがArrayAdapterによってサポートされている場合、これはそのリスト位置の配列アイテムになります)。アイテムを別の方法で表示する必要があることを示すフラグまたはプロパティを設定してから、アダプタのgetView()メソッドに条件コードを追加して、そのリストアイテムのオブジェクトのプロパティに基づいて適切なスタイルでテキストを表示できます。

次に、ビューが次に表示されたときにビューがそれに応じてレンダリングされるようにするかnotifyDataSetChanged()、リストアダプタを呼び出して自分で再描画をトリガーできます。

于 2013-01-03T20:18:36.823 に答える