0

私はこのコードをListFragment内に持っています:

TextView tv = (TextView) this.getListView().getChildAt(0);
tv.setBackgroundColor(getResources().getColor(R.color.White));
tv.setTextColor(getResources().getColor(R.color.OtherColor));

このコードをonActivityCreatedで記述したかったのですが、tvがnullです。

このコードをonListItemClick内に記述すると、完全に機能します。

私が欲しいものは不可能ですか?

コード:

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    String[] values = new String[] { getResources().getString(R.string.menu_partida),
              getResources().getString(R.string.menu_acciones),
              getResources().getString(R.string.menu_resultado) };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_item_menu, values);
    setListAdapter(adapter);
}
4

1 に答える 1

0

ビューは、すべての「作成」コールバックが実行された後にのみ描画されます。このイベントのコールバックはありません。ただしpost()、UIハンドラーに対して実行可能であり、同じことを実現できます。

getListView().post(new Runnable() {
    public void run() {
        TextView tv = (TextView) this.getListView().getChildAt(0);
        tv.setBackgroundColor(getResources().getColor(R.color.White));
        tv.setTextColor(getResources().getColor(R.color.OtherColor));
    }
}

ただし、実際には、行のレイアウトはListViewで再利用されるため、この変更では期待どおりの結果は得られません。(スクロール中に消去動作が表示されます。)カスタムアダプタを作成して、行のレイアウトをでposition 0 のみ変更する必要があります。行が3つしかないため、Runnableを使用しない場合がありますが、最善の解決策は、Adapterを拡張することです。

于 2013-03-26T18:36:46.890 に答える