如何填充 GridView 中的空单元格并使其不可点击

How to fill empty cells in a GridView and make it non cickable

这是我的 GridView 代码

    <GridView
        android:id="@+id/device_display_grid"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="100dp"
        android:numColumns="3"
        android:verticalSpacing="1dp"
        android:horizontalSpacing="1dp"
        android:background="#e5e5e5"/>

这是我的 GridView 的样子

我的网格视图

我正在从数据库获取数据并使用该数据填充我的 GridView。我的问题是如何使右下角的空白视图显示为白色背景。 我还需要让我的 onItemClickListner 在被点击时不执行任何操作。并假设如果我有 2 个空单元格,那么它们都应该被填充。

只需在数组的最后一个索引中添加一个额外的空对象。

 var emptycell=0
    if(array.size % 3 == 1) {
        array.add(EmptyObject())
        array.add(EmptyObject())
        emptycell=2
    } else if (list % 3 == 2) {
        array.add(EmptyObject())
        emptycell=1
    }

并且当用户单击任何项​​目时,您可以检查单击的位置应该低于 array.size - 如下所示的空单元格。

if(position<array.size-emptycell){
//do whatever
}

在收到适配器之前使用:

if(list.size % 3 == 1) {
  list.add(YourModel())
  list.add(YourModel())
} else if (list % 3 == 2) {
  list.add(YourModel())
}

如果您在适配器中使用 RecyclerView:

//onBind
if(item.someField == null) {
  holder.cover.visibility = View.INVISIBLE
  holder.cover.visibility = View.INVISIBLE
}

//holder
fun setOnClickListener(item: YourModel) {
  if(item.someField == null) {
    vItem.setOnClickListener(null)
  } else {
    vItem.setOnClickListener(yourListener)
  }
}

这不是最佳实践,它只是快速的想法。

P.S。 sorry at Kotlin,好久没写了Java