0

我在 ListFragment 中有这段代码:

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

我想在ActivityCreated 上编写这段代码,但 tv 为空。

如果我在 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()将 Runnable 传递给 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 . 由于只有三行,您可能会摆脱 Runnable,但最好的解决方案是扩展 Adapter。

于 2013-03-26T18:36:46.890 回答