gpt4 book ai didi

android - 如何设置单个gridview单元格的背景颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:00 25 4
gpt4 key购买 nike

我有一个 GridView,每个单元格都包含一些文本,我希望能够设置单个单元格的背景颜色。

我的 GridView 的 XML 是:

<GridView android:id="@+id/students_grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="6"
android:gravity="center"
android:stretchMode="columnWidth">
</GridView>

我的 GridView 的代码是:

GridView gridView = (GridView) findViewById(R.id.students_grid);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, student_array);
gridView.setAdapter(adapter);

我曾希望我能够使用以下方法设置单个单元格的背景颜色:

gridView.getChildAt(random_student).setBackgroundColor(Color.parseColor("#18A608"));

然而,这会抛出空指针异常,进一步检查似乎 gridview.getChildCount() 返回 0。我已经看到 gridview.getCount 正确返回 gridview 中的项目数,但这无济于事我来设置单个单元格的背景颜色。

我下一步要去哪里有什么想法吗?

最佳答案

解决这个问题的关键是首先要明白ListView是如何实现的和 GridView工作。 GridView上下滚动时创建和销毁 subview 。如果您在 GridView 中看不到某个项目这意味着它没有 subview ,它将在用户实际滚动到它时创建。 GridView使用 Adapter创建 View 和 GridView当 View 离开屏幕时回收 View ,并要求适配器将回收的 View 重新用于出现在屏幕上的新 View 。 Adapter通常会扩充资源布局以创建新 View 。

所以这意味着 GridView会调用getView(...)Adapter 上每次它想在屏幕上显示一个 subview 时,它可能会传递一个名为 convertView 的回收 View .

解决方案是覆盖getView(...) , 调用 super 让 Adapter使用来自 String 的数据创建并填充 View 通常是数组,但在我们将 View 返回给 GridView 之前在末尾添加一些代码设置 View 的颜色。

new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, student_array) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);

int color = 0x00FFFFFF; // Transparent
if (someCondition) {
color = 0xFF0000FF; // Opaque Blue
}

view.setBackgroundColor(color);

return view;
}
};

关于android - 如何设置单个gridview单元格的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12885903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com