何时填充与ListFragment关联的列表视图

时间:2013-03-26 18:30:28

标签: android android-listview android-listfragment

我在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);
}

1 个答案:

答案 0 :(得分: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。