我相信,如果你想要某种选择提示,你需要一个可聚焦的对象。但是,对于可聚焦对象(例如按钮),将 OnItemClickListener 附加到 GridView 不起作用(如果我没记错的话)。相反,您必须在适配器中的 getView() 处将 OnClickListener 单独附加到每个项目。
适配器:
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
Button button;
if (convertView == null) { // if it's not recycled, initialize some attributes
button = new Button(mContext);
// set layout params (make sure its GridView.layoutParams)
// and other stuff
}
else {
button = (Button) convertView;
}
button.setBackgroundResource(mThumbIds[position]); // mThumbIds hold Resource Ids
button.setOnClickListener(new OnClickListener() {
onClick(View v) {
// store directly to database here, or send it with the activity with sharedPreferences (below)
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences("MY_PREFERENCE", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("button_id", mThumbIds[position]);
// Commit the edits!
editor.commit();
}
});
return button;
}
}
在 Activity 端,保存按钮 onClickListener:
onClick(View v) {
// Restore preferences
SharedPreferences settings = getSharedPreferences("MY_PREFERENCE", 0);
int id = settings.getInt("button_id", -1);
// now safe all stuff to database
}
可能缺少细节,因为 Button 是可聚焦的,但我认为应该这样做。此外,您将通过使用 .xml 定义的选择器资源来实现选择。然而,这应该在一个单独的问题中解决。
编辑1:实际上现在我考虑了一下,我不确定可绘制的.xml(选择器)是否可以有一个ID。稍后我将不得不在家里实现它并尝试一下。
编辑 2:我添加了 sharedPreference 部分
编辑 3:添加了 sharedPreference 的活动端查询。