我有一个列表视图,它是通过xml中的字符串数组填充的,而不是运行时间,我尝试使用以下方法设置列表中特定项目的背景颜色:
listView.getChildAt(x).setBackgroundColor(Color.BLACK);
我需要在它可见之前发生这种情况,但是当我在onCreate()或onStart()中使用它时会出错,但是如果我按下按钮就可以运行它。我已经尝试过寻找答案,但似乎无法找到任何发生得太晚的事件。
答案 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>
这里是link到post
。可运行的开始于onStart()
之前。因此,如果这是一项要求,那么这种方式可能不适合您。