【问题标题】:Marking GridView item as selected将 GridView 项目标记为选中
【发布时间】:2014-07-23 18:35:26
【问题描述】:

我正在尝试创建一个图标选择器。单击主活动中的图标后,图标选择器活动将打开:

Intent intent_open_icon_picker = new Intent(Activity_Add_Edit_Trip.this, Activity_Icon_Picker.class);
intent_open_icon_picker.putExtra("SELECTED_ICON", current_icon_position);
startActivityForResult(intent_open_icon_picker, Constants.Request_Codes.REQUEST_CODE_SET_TRIP_ICON);

current_icon_position默认为0,将数组中的第一个图标设置为ImageView。

然后在 row_grid.xml 我有这个代码,对于 GridView 中的每一行(注意背景):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/grid_color_selector"
android:clickable="false"
android:focusable="false"
android:orientation="vertical"
android:padding="5dp" >

<ImageView
    android:id="@+id/image"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:scaleType="fitCenter"
    android:focusable="false"
    android:clickable="false" >
</ImageView>

</LinearLayout>

这是@drawable/grid_color_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/color_BLUE" android:state_pressed="true"/>
    <item android:drawable="@color/color_BLUE" android:state_selected="true"/>
    <item android:drawable="@color/color_WHITE"/>
</selector>

当图标选择器活动打开时 - 我想自动突出显示(或标记为选中)当前图标(我对应于我在 Intent 中传递的 current_icon_position 的图标)。所以我尝试了一些东西,但似乎都没有。我试着这样做:

if(getIntent().getExtras()!=null)
{
    curr_icon_position = getIntent().getExtras().getInt("SELECTED_ICON");
}

grid_view = (GridView) findViewById(R.id.gv_icons);
adapter = new GridView_Adapter(this, R.layout.row_grid, get_icons(), curr_icon_position);
grid_view.setAdapter(adapter);
**grid_view.setSelection(curr_icon_position);**

然后我尝试在我的 Trip_Icon 对象中创建一个布尔标志并像这样设置它:

private ArrayList get_icons() {
    final ArrayList arr_trip_icons = new ArrayList();
    TypedArray imgs = getResources().obtainTypedArray(R.array.trip_icons_blac);
    for (int i = 0; i < imgs.length(); i++) {
        Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),
                imgs.getResourceId(i, -1));
        Trip_Icon current_icon = new Trip_Icon(bitmap);
        **if(i==curr_icon_position)
        {
            current_icon.setSelected(true);
        }**
        arr_trip_icons.add(current_icon);
    }
    imgs.recycle();

    return arr_trip_icons;

}

在我的适配器中做这样的事情:

public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder holder;

    if (row == null) {
        holder = new ViewHolder();
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layout_resource_id, parent, false);
        holder.image = (ImageView) row.findViewById(R.id.image);
        row.setTag(holder);
    } else {
        holder = (ViewHolder) row.getTag();
    }

    Trip_Icon icon = (Trip_Icon) data.get(position);
    holder.image.setImageBitmap(icon.getImage());
    **if(icon.isSelected())
    {
        row.setSelected(true);
    }**

    return row;
}

但正如我所说,我从未看到突出显示的图标。

为了更清楚,这就是我想要做的 - 如果current_icon_position 为 0,那么我希望 GridView 中的第一项被突出显示,如图所示:

我做错了什么,如何突出显示当前图标?

【问题讨论】:

  • 你想在我得到选择时突出显示视图吗?
  • @SuppressWarnings 当我单击它时它会突出显示一个项目,但我希望自动突出显示当前项目,将该项目标记为已选中,因此用户现在会知道当前选中的项目是什么。
  • @SuppressWarnings 我用我想要实现的图像更新我的问题。
  • @Igal 你得到答案了吗?
  • @Igal 我也在寻找类似的东西stackoverflow.com/questions/63414396/…

标签: android gridview android-gridview


【解决方案1】:

最终,经过多次尝试和错误,看起来我设法解决了这个问题。也许这个解决方案对其他人有用:

首先我将这一行添加到我的 GridView:

android:choiceMode="singleChoice"

然后我将此行添加到我的@drawable/grid_color_selector

<item android:drawable="@color/color_BLUE" android:state_activated="true"/>

最后在我的图标选择器活动中,在适配器设置为 Grid_view 之后,我添加了这一行:

grid_view.setItemChecked(curr_icon_position, true);

正如我在问题中所说,curr_icon_position 正在作为 Intent extra 传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多