Android GridView自定义BaseAdapter ImageView ImageButton OnItemClick不´;行不通
我在将GridView与CustomAdapter(extends BaseAdapter)一起使用时遇到问题Android GridView自定义BaseAdapter ImageView ImageButton OnItemClick不´;行不通,android,Android,我在将GridView与CustomAdapter(extends BaseAdapter)一起使用时遇到问题 我的活动实现了侦听器 如果我使用ImageView作为项目,一切正常,则会触发/捕获OnItemClick事件 我还没有找到使用ImageButton定制BaseAdapter的GridView的有用示例。 有人有主意吗 片段: class MyActivity extends Activity implements OnItemClickListener { ... @O
- 我的活动实现了侦听器
- 如果我使用ImageView作为项目,一切正常,则会触发/捕获OnItemClick事件
class MyActivity extends Activity implements OnItemClickListener {
...
@Override
public void onCreate() {
...
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setOnItemClickListener(this);
gridview.setAdapter(new ImageButtonAdapter(this));
}
...
@Override
public void onItemClick(AdapterView<?> adapter, View view, int arg2, long arg3)
{
Log.e("onItemClick()", "arg2=" + arg2 + ", arg3=" + arg3);
}
}
public class ImageButtonAdapter extends BaseAdapter
{
private Context mContext;
public LayoutMenuAdapter(Context c)
{
mContext = c;
}
public int getCount()
{
return mThumbIds.length;
}
public Object getItem(int position)
{
return null;
}
public long getItemId(int position)
{
return 0;
}
public View getView(int position, View convertView, ViewGroup parent)
{
/* IF I USE THIS PART EVERYTHING WORKS FINE */
// ImageView imageView;
// if (convertView == null) {
// imageView = new ImageView(mContext);
// imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
// imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
// imageView.setPadding(0, 0, 0, 0);
// imageView.setFocusable(false);
// } else {
// imageView = (ImageView) convertView;
// }
// imageView.setImageResource(mThumbIds[position]);
// return imageView;
/* IF I USE THIS PART NO THE ACTIVITY/LISTENER RECEIVES NO EVENT */
ImageButton imageButton;
if (convertView == null) {
imageButton = new ImageButton(mContext);
imageButton.setLayoutParams(new GridView.LayoutParams(100, 100));
imageButton.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageButton.setPadding(0, 0, 0, 0);
imageButton.setFocusable(false);
} else {
imageButton = (ImageButton) convertView;
}
imageButton.setImageResource(mThumbIds[position]);
return imageButton;
}
// references to images
private Integer[] mThumbIds = { R.drawable.media};
}
类MyActivity扩展活动实现了McClickListener{
...
@凌驾
public void onCreate(){
...
GridView GridView=(GridView)findViewById(R.id.GridView);
setOnItemClickListener(this);
setAdapter(新的ImageButtonAdapter(this));
}
...
@凌驾
公共控件单击(AdapterView适配器、视图视图、int arg2、long arg3)
{
Log.e(“onItemClick()”,“arg2=“+arg2+”,arg3=“+arg3”);
}
}
公共类ImageButtonAdapter扩展BaseAdapter
{
私有上下文;
公共布局MenuAdapter(上下文c)
{
mContext=c;
}
public int getCount()
{
返回mThumbIds.length;
}
公共对象getItem(int位置)
{
返回null;
}
公共长getItemId(int位置)
{
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
/*如果我用这个零件,一切都很好*/
//图像视图图像视图;
//if(convertView==null){
//imageView=新的imageView(mContext);
//setLayoutParams(新的GridView.LayoutParams(100100));
//imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
//setPadding(0,0,0,0);
//imageView.setFocusable(false);
//}其他{
//imageView=(imageView)convertView;
// }
//setImageResource(mThumbIds[position]);
//返回图像视图;
/*如果我使用此部件,则“活动/侦听器”不会收到任何事件*/
图像按钮图像按钮;
if(convertView==null){
imageButton=新的imageButton(mContext);
setLayoutParams(新的GridView.LayoutParams(100100));
imageButton.setScaleType(ImageView.ScaleType.CENTER\U裁剪);
设置填充(0,0,0,0);
imageButton.setFocusable(假);
}否则{
imageButton=(imageButton)转换视图;
}
setImageResource(mThumbIds[position]);
返回图像按钮;
}
//对图像的引用
私有整数[]mThumbIds={R.drawable.media};
}
在getView()中实现OnClickListener
Class MyActivity extends Activity implements OnItemClickListener {
...
@Override
public void onCreate() {
...
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setOnItemClickListener(this);
gridview.setAdapter(new ImageButtonAdapter(this));
}
...
// @Override
// public void onItemClick(AdapterView<?> adapter, View view, int arg2, long arg3)
// {
// Log.e("onItemClick()", "arg2=" + arg2 + ", arg3=" + arg3);
// }
}
public class ImageButtonAdapter extends BaseAdapter
{
private Context mContext;
public LayoutMenuAdapter(Context c)
{
mContext = c;
}
public int getCount()
{
return mThumbIds.length;
}
public Object getItem(int position)
{
return null;
}
public long getItemId(int position)
{
return 0;
}
public View getView(int position, View convertView, ViewGroup parent)
{
/* IF I USE THIS PART EVERYTHING WORKS FINE */
// ImageView imageView;
// if (convertView == null) {
// imageView = new ImageView(mContext);
// imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
// imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
// imageView.setPadding(0, 0, 0, 0);
// imageView.setFocusable(false);
// } else {
// imageView = (ImageView) convertView;
// }
// imageView.setImageResource(mThumbIds[position]);
// return imageView;
/* IF I USE THIS PART NO THE ACTIVITY/LISTENER RECEIVES NO EVENT */
ImageButton imageButton;
if (convertView == null) {
imageButton = new ImageButton(mContext);
imageButton.setLayoutParams(new GridView.LayoutParams(100, 100));
imageButton.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageButton.setPadding(0, 0, 0, 0);
imageButton.setFocusable(false);
} else {
imageButton = (ImageButton) convertView;
}
imageButton.setImageResource(mThumbIds[position]);
imageButton.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Log.e("onClick()", position);
}
});
return imageButton;
}
// references to images
private Integer[] mThumbIds = { R.drawable.media};
}
类MyActivity扩展活动实现了McClickListener{
...
@凌驾
public void onCreate(){
...
GridView GridView=(GridView)findViewById(R.id.GridView);
setOnItemClickListener(this);
setAdapter(新的ImageButtonAdapter(this));
}
...
//@覆盖
//公共控件单击(AdapterView适配器、视图视图、int arg2、long arg3)
// {
//Log.e(“onItemClick()”,“arg2=“+arg2+”,arg3=“+arg3”);
// }
}
公共类ImageButtonAdapter扩展BaseAdapter
{
私有上下文;
公共布局MenuAdapter(上下文c)
{
mContext=c;
}
public int getCount()
{
返回mThumbIds.length;
}
公共对象getItem(int位置)
{
返回null;
}
公共长getItemId(int位置)
{
返回0;
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
/*如果我用这个零件,一切都很好*/
//图像视图图像视图;
//if(convertView==null){
//imageView=新的imageView(mContext);
//setLayoutParams(新的GridView.LayoutParams(100100));
//imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
//setPadding(0,0,0,0);
//imageView.setFocusable(false);
//}其他{
//imageView=(imageView)convertView;
// }
//setImageResource(mThumbIds[position]);
//返回图像视图;
/*如果我使用此部件,则“活动/侦听器”不会收到任何事件*/
图像按钮图像按钮;
if(convertView==null){
imageButton=新的imageButton(mContext);
setLayoutParams(新的GridView.LayoutParams(100100));
imageButton.setScaleType(ImageView.ScaleType.CENTER\U裁剪);
设置填充(0,0,0,0);
imageButton.setFocusable(假);
}否则{
imageButton=(imageButton)转换视图;
}
setImageResource(mThumbIds[position]);
setOnClickListener(新的OnClickListener(){
公共void onClick(视图arg0){
Log.e(“onClick()”,位置);
}
});
返回图像按钮;
}
//对图像的引用
私有整数[]mThumbIds={R.drawable.media};
}
非常感谢您的帮助,现在我的活动只实现了一个OnClickListener,它将通过ctor传递到适配器并绑定到每个按钮:
class MyActivity extends Activity implements OnClickListener {
...
@Override
public void onCreate() {
...
GridView gridview = (GridView) findViewById(R.id.gridview);
// gridview.setOnItemClickListener(this); // removed
gridview.setAdapter(new ImageButtonAdapter(this, this));
}
...
@Override
public void onClick(View view)
{
Log.i("onClick()", "view=" + view);
}
}
public class ImageButtonAdapter extends BaseAdapter
{
private Context mContext;
private OnClickListener mListener;
public LayoutMenuAdapter(Context c, OnClickListener l)
{
mContext = c;
mListener = l;
}
public int getCount()
{
return mThumbIds.length;
}
public Object getItem(int position)
{
return null;
}
public long getItemId(int position)
{
return 0;
}
public View getView(int position, View convertView, ViewGroup parent)
{
ImageButton imageButton;
if (convertView == null) {
imageButton = new ImageButton(mContext);
imageButton.setLayoutParams(new GridView.LayoutParams(100, 100));
imageButton.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageButton.setPadding(0, 0, 0, 0);
imageButton.setFocusable(false);
} else {
imageButton = (ImageButton) convertView;
}
imageButton.setImageResource(mThumbIds[position]);
imageButton.setOnClickListener(mListener);
return imageButton;
}
// references to images
private Integer[] mThumbIds = { R.drawable.media};
}
你看到了什么样的错误(请发帖)?作为快速概述,这看起来足够了。没有错误消息,侦听器没有按预期工作。这是我自己的一个初学者思维错误,因为监听器绑定到GridView。如果我喜欢使用ImageButtons,OnClickListener必须绑定到每个按钮(见下文)。。。还是非常感谢!