【问题标题】:Set highlighted item in GridView on Android在 Android 上的 GridView 中设置突出显示的项目
【发布时间】:2013-04-09 09:12:44
【问题描述】:

有时候看到简单的事情很难找到解决方案,我真的很惊讶。

我有一个GridView,有 6 列和多行。每个项目都是一个以颜色为背景的正方形。当我选择一个项目时,它会在设置 listSelector 时突出显示

<GridView
        android:id="@+id/listFontColors"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_gravity="center_horizontal"
        android:layout_margin="8dip"
        android:drawSelectorOnTop="true"
        android:gravity="center"
        android:horizontalSpacing="3dp"
        android:listSelector="@drawable/color_list_selected"
        android:numColumns="6"
        android:padding="0dip"
        android:scrollbars="none"
        android:stretchMode="columnWidth"
        android:verticalSpacing="3dp" />

当我打开包含GridView 的布局时,我想突出显示上一个选定的项目。由于它后面的适配器有一个ArrayList&lt;Object&gt;,所以很容易找到需要突出显示的位置。问题是执行实际突出显示。

我做了很多测试:

listColors.requestFocus();
listColors.setSelection(9);

if (v != null) {
    v.requestFocus();
    v.setPressed(true);
    v.setSelected(true);
}
listColors.performItemClick(listColors, 9, listColors.getItemIdAtPosition(9));

这些都不起作用。有什么想法吗?

【问题讨论】:

    标签: android android-gridview


    【解决方案1】:

    最简单的方法是保存 position 并在 getView() 方法中的 Adapter 类中检查它。

    if(selected_position = position){
        view.setBackgroundResource(selected_resource_id);
    }
    else{
        view.setBackgroundResource(resource_id);
    }
    

    然后只需在您的适配器上调用notifyDataSetChanged()

    【讨论】:

    • 所以您是说,删除 listSelector 并制作 2 个项目并根据位置加载一个或另一个?我很惊讶地看到默认实现中缺少这样一个简单的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多