如何比onCreate()和onStart()事件稍晚运行代码?

时间:2017-09-06 15:21:26

标签: android

我有一个列表视图,它是通过xml中的字符串数组填充的,而不是运行时间,我尝试使用以下方法设置列表中特定项目的背景颜色:

listView.getChildAt(x).setBackgroundColor(Color.BLACK);

我需要在它可见之前发生这种情况,但是当我在onCreate()或onStart()中使用它时会出错,但是如果我按下按钮就可以运行它。我已经尝试过寻找答案,但似乎无法找到任何发生得太晚的事件。

1 个答案:

答案 0 :(得分:0)

getView()是最好的选择,但是您无法通过android:entries=...的方式访问。相反,您可以将一个runnable发布到消息队列,以便在布局发生后更改颜色,如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.layout).post(new Runnable() {
        @Override
        public void run() {
            findViewById(R.id.view).setBackgroundResource(android.R.color.holo_red_dark);
        }
    });
}

在这里,我使用简单的View进行演示,但同样的技巧应该适用于ListView

如果您想使用它,我使用的是以下XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <View
        android:id="@+id/view"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@android:color/holo_blue_light" />
</LinearLayout>

这里是linkpost。可运行的开始于onStart()之前。因此,如果这是一项要求,那么这种方式可能不适合您。