gpt4 book ai didi

android - 当 numColumns 更改时,如何在 gridview 上保留所选项目突出显示?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:06:42 28 4
gpt4 key购买 nike

我有一个带有 GridViewActionBarActivity

GridView2 纵向列3 横向列。

当我选择纵向项目(启动我的 ActionMode)然后旋转设备时,所选项目突出显示向左移动一个项目。例如,如果我选择第二项并旋转,第一项将突出显示。如果我选择第一个项目并旋转,则不会突出显示任何项目。

代码中的实际选择是正确的,只是突出显示是错误的。

我注意到如果我保持纵向和横向的 numColumns 相同,它不会执行此操作。

我相信这个问题是在我将 Activity 更改为 ActionBarActivity 之后开始出现的,所以它可能是一个错误..

有人知道为什么或如何解决它吗?

最佳答案

我有一个类似的场景并最终解决了这个问题,即创建一个带有 boolean 字段的自定义网格项目来跟踪项目是否被选中,然后通过自定义适配器。以下是我所做工作的粗略概述:

(1) 我创建了一个带有 boolean 字段的自定义网格项,为简单起见,我们将其称为 selectedStatus。我还在我的网格项类中添加了相应的方法来获取选中状态:

public boolean getSelectedStatus ()
{
return selectedStatus;
}

public void setSelectedStatus (boolean paramSelectedStatus)
{
this.selectedStatus = paramSelectedStatus;
}

(2) 然后我创建了一个自定义 Adapter,它extends BaseAdapter 来处理我创建的自定义网格对象。在这个 Adapter 中,我检查网格对象的选定状态是 true 还是 false 并相应地突出显示该项目,如下所示:

@Override
public View getView (final int position, View convertView, ViewGroup parent)
{

// rest of getView() code...

if (!yourGridObject.getSelectedStatus())
{
convertView.setBackgroundColor(Color.TRANSPARENT);
}
else
{
convertView.setBackgroundColor(Color.LTGRAY);
}

// rest of getView() code...

return convertView;
}

(3) 最后,添加 onItemClickListener 以设置选中状态和网格项被选中(单击)时的背景颜色:

yourGridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
YourGridObject yourGridObject = (YourGridObject) parent.getItemAtPosition(position);
if (!yourGridObject.getSelected())
{
view.setBackgroundColor(Color.LTGRAY);
yourGridObject.setSelected(true);
}
else
{
view.setBackgroundColor(Color.TRANSPARENT);
yourGridObject.setSelected(false);
}
}
});

以这种方式实现选择确保当列数和行数交换时网格项目的突出显示(选择)不会改变,因为选择状态包含在网格对象本身中。

关于android - 当 numColumns 更改时,如何在 gridview 上保留所选项目突出显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769346/

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