我正在尝试创建一个Icon选择器。单击主要活动中的图标后,图标选择器活动将打开:
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中的第一项突出显示,如图所示:
我做错了什么,如何突出显示当前图标?
答案 0 :(得分:0)
最终,经过多次尝试和错误,看起来我设法解决了这个问题。也许这个解决方案对其他人有用:
首先,我将这一行添加到我的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传递。