android gridview的item中第一个button点击没反应,点击其他的item上的button后才执行第一个item的button的事件 补充一下我用的开发api版本是4.0.3,如有愿意进一步了解讨论的加我qq 969298114 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我用的是BaseAdapter,getview里的position默认就是从0开始的,我也没改 package com.www.testlifale;import java.util.ArrayList;import java.util.List;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Color;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;/** * 使用列表缓存过去的Item * * @author hellogv * */public class CacheAdapter extends BaseAdapter { private Context mContext; private ArrayList<Item> mItems = new ArrayList<Item>(); private LayoutInflater inflater; private Thread th; public static ProgressDialog dialog; private int id; public CacheAdapter(Context c, ArrayList<Item> mItems) { mContext = c; this.mItems = mItems; inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void addItem(String itemTitle, String name, int type) { mItems.add(new Item(itemTitle, name, type)); } public int getCount() { return mItems.size(); } public Item getItem(int position) { return mItems.get(position); } public long getItemId(int position) { return position; } List<Integer> lstPosition = new ArrayList<Integer>(); List<View> lstView = new ArrayList<View>(); List<Integer> lstTimes = new ArrayList<Integer>(); public View getView(int position, View convertView, ViewGroup parent) { if (lstPosition.contains(position) == false) { if (lstPosition.size() > 75)// 这里设置缓存的Item数量 { lstPosition.remove(0);// 删除第一项 lstView.remove(0);// 删除第一项 } convertView = inflater.inflate(R.layout.gv_item, null); final RelativeLayout rl = (RelativeLayout) convertView .findViewById(R.id.rl_zong); final TextView text = (TextView) convertView .findViewById(R.id.tv_name); final Button btn_kaitai = (Button) convertView .findViewById(R.id.btn_kaitai); btn_kaitai.setTag(position); final Button btn_close = (Button) convertView .findViewById(R.id.btn_close); final Button btn_pingjia = (Button) convertView .findViewById(R.id.btn_pingjia); final Button btn_service = (Button) convertView .findViewById(R.id.btn_service); switch (mItems.get(position).getType()) { case 0:// 开台 btn_kaitai.setVisibility(View.GONE); btn_close.setVisibility(View.VISIBLE); btn_pingjia.setVisibility(View.GONE); btn_service.setVisibility(View.VISIBLE); text.setText("美发师:" + mItems.get(position).getName()); rl.setBackgroundColor(Color.GREEN); break; case 1:// 未开台 btn_kaitai.setVisibility(View.VISIBLE); btn_close.setVisibility(View.GONE); btn_pingjia.setVisibility(View.INVISIBLE); btn_service.setVisibility(View.GONE); text.setText(mItems.get(position).getItemTitle()); rl.setBackgroundColor(Color.WHITE); break; case 2:// 等待评价状态 btn_kaitai.setVisibility(View.GONE); btn_close.setVisibility(View.VISIBLE); btn_service.setVisibility(View.GONE); btn_pingjia.setVisibility(View.VISIBLE); text.setText(mItems.get(position).getName()); rl.setBackgroundColor(Color.GREEN); break; default: break; } btn_kaitai.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "开台" + btn_kaitai.getTag(), Toast.LENGTH_SHORT).show(); } }); btn_pingjia.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); btn_service.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); btn_close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); lstPosition.add(position);// 添加最新项 lstView.add(convertView);// 添加最新项 } else { convertView = lstView.get(lstPosition.indexOf(position)); final RelativeLayout rl = (RelativeLayout) convertView .findViewById(R.id.rl_zong); final TextView text = (TextView) convertView .findViewById(R.id.tv_name); final Button btn_kaitai = (Button) convertView .findViewById(R.id.btn_kaitai);// btn_kaitai.setTag(position); final Button btn_close = (Button) convertView .findViewById(R.id.btn_close); final Button btn_pingjia = (Button) convertView .findViewById(R.id.btn_pingjia); final Button btn_service = (Button) convertView .findViewById(R.id.btn_service); switch (mItems.get(position).getType()) { case 0:// 开台 btn_kaitai.setVisibility(View.GONE); btn_close.setVisibility(View.VISIBLE); btn_pingjia.setVisibility(View.GONE); btn_service.setVisibility(View.VISIBLE); text.setText("美发师:" + mItems.get(position).getName()); rl.setBackgroundColor(Color.GREEN); break; case 1:// 未开台 btn_kaitai.setVisibility(View.VISIBLE); btn_close.setVisibility(View.GONE); btn_pingjia.setVisibility(View.INVISIBLE); btn_service.setVisibility(View.GONE); text.setText(mItems.get(position).getItemTitle()); rl.setBackgroundColor(Color.WHITE); break; case 2:// 等待评价状态 btn_kaitai.setVisibility(View.GONE); btn_close.setVisibility(View.VISIBLE); btn_service.setVisibility(View.GONE); btn_pingjia.setVisibility(View.VISIBLE); text.setText(mItems.get(position).getName()); rl.setBackgroundColor(Color.GREEN); break; default: break; } btn_kaitai.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(mContext, "开台" + btn_kaitai.getTag(), Toast.LENGTH_SHORT).show(); } }); btn_pingjia.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); btn_service.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); btn_close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new AlertDialog.Builder(mContext) .setTitle("退出") .setMessage("你确定强制关闭吗?") .setCancelable(false) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int which) { } }).setNegativeButton("取消", null).show(); } }); } return convertView; }}代码是参照网上一位大侠写的,我写的也比较啰嗦请多指教 现在主要是btn_pingjia按钮的问题,其他的可以忽略不计 一哥们在真机上运行没有这种情况,我在pid上就不行了 我也遇到同样的问题,点击其他item时,第一个item的click事件才能响应,是gridview控件的问题吗,楼主解决了吗? 哥们,这个问题你解决了没。。我也碰到了,不知道咋办。android gridview的item中第一个button点击没反应,点击其他的item上的button后才执行第一个item的button的事件 我也遇到过此问题,不知道原因是啥,不过可以解决,将btn的点击事件转移到gridview中即可,gridview.setOnItemClickListener(listener); 为什么btn_kaitai.setOnClickListener要注册两次,会不会是btn_kaitai.getTag()时没有获取到值? 我也遇到了此问题,最终找出了原因:不要对 Adapter中的 convertView 对象进行任何样式变更操作(即GridView子视图的根元素样式不要在代码中去动态变更),我之前是在每次getView方法执行时,对 convertView 对象重新配置了LayoutParams,导致出现此问题。后来将其去掉就正常了。楼主的代码,中对convertView 设置了背景颜色(“rl.setBackgroundColor(Color.GREEN);”),我也测试了同样能引发此问题 ,将其全部注释掉即可。 android 滚动条ui问题 Android SAX解析 怎么得到单独属性 怎么才能监听能到用户将要启动的程序的信息呢? 求 Android操作系统的开源代码 问一个android界面的思路问题……牛牛们帮帮忙…… 为啥里程碑程序转到后台回前台后程序总是从开始界面开始? 周二去文思创新笔试android,希望给点建议! opengl 阴影怎么实现? 关于fragment更新的问题 !!!怎么判断通过蓝牙连接到android系统上的手机是否是在漫游??? 启动一个APK程序之后,想禁止掉返回launcher界面,这个怎么做啊,求各位帮助! android客户端请求不到服务器数据
import java.util.List;import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;/**
* 使用列表缓存过去的Item
*
* @author hellogv
*
*/
public class CacheAdapter extends BaseAdapter { private Context mContext;
private ArrayList<Item> mItems = new ArrayList<Item>();
private LayoutInflater inflater;
private Thread th;
public static ProgressDialog dialog;
private int id; public CacheAdapter(Context c, ArrayList<Item> mItems) {
mContext = c;
this.mItems = mItems;
inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
} public void addItem(String itemTitle, String name, int type) {
mItems.add(new Item(itemTitle, name, type));
} public int getCount() {
return mItems.size();
} public Item getItem(int position) {
return mItems.get(position);
} public long getItemId(int position) {
return position;
} List<Integer> lstPosition = new ArrayList<Integer>();
List<View> lstView = new ArrayList<View>(); List<Integer> lstTimes = new ArrayList<Integer>(); public View getView(int position, View convertView, ViewGroup parent) { if (lstPosition.contains(position) == false) {
if (lstPosition.size() > 75)// 这里设置缓存的Item数量
{
lstPosition.remove(0);// 删除第一项
lstView.remove(0);// 删除第一项
}
convertView = inflater.inflate(R.layout.gv_item, null);
final RelativeLayout rl = (RelativeLayout) convertView
.findViewById(R.id.rl_zong);
final TextView text = (TextView) convertView
.findViewById(R.id.tv_name);
final Button btn_kaitai = (Button) convertView
.findViewById(R.id.btn_kaitai);
btn_kaitai.setTag(position);
final Button btn_close = (Button) convertView
.findViewById(R.id.btn_close);
final Button btn_pingjia = (Button) convertView
.findViewById(R.id.btn_pingjia);
final Button btn_service = (Button) convertView
.findViewById(R.id.btn_service);
switch (mItems.get(position).getType()) {
case 0:// 开台
btn_kaitai.setVisibility(View.GONE);
btn_close.setVisibility(View.VISIBLE);
btn_pingjia.setVisibility(View.GONE);
btn_service.setVisibility(View.VISIBLE);
text.setText("美发师:" + mItems.get(position).getName());
rl.setBackgroundColor(Color.GREEN);
break;
case 1:// 未开台
btn_kaitai.setVisibility(View.VISIBLE);
btn_close.setVisibility(View.GONE);
btn_pingjia.setVisibility(View.INVISIBLE);
btn_service.setVisibility(View.GONE);
text.setText(mItems.get(position).getItemTitle());
rl.setBackgroundColor(Color.WHITE);
break;
case 2:// 等待评价状态
btn_kaitai.setVisibility(View.GONE);
btn_close.setVisibility(View.VISIBLE);
btn_service.setVisibility(View.GONE);
btn_pingjia.setVisibility(View.VISIBLE);
text.setText(mItems.get(position).getName());
rl.setBackgroundColor(Color.GREEN);
break; default:
break;
} btn_kaitai.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
Toast.makeText(mContext, "开台" + btn_kaitai.getTag(), Toast.LENGTH_SHORT).show();
}
});
btn_pingjia.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
}
});
btn_service.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
}
});
btn_close.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
}
}); lstPosition.add(position);// 添加最新项
lstView.add(convertView);// 添加最新项
} else {
convertView = lstView.get(lstPosition.indexOf(position));
final RelativeLayout rl = (RelativeLayout) convertView
.findViewById(R.id.rl_zong);
final TextView text = (TextView) convertView
.findViewById(R.id.tv_name);
final Button btn_kaitai = (Button) convertView
.findViewById(R.id.btn_kaitai);
// btn_kaitai.setTag(position);
final Button btn_close = (Button) convertView
.findViewById(R.id.btn_close);
final Button btn_pingjia = (Button) convertView
.findViewById(R.id.btn_pingjia);
final Button btn_service = (Button) convertView
.findViewById(R.id.btn_service);
switch (mItems.get(position).getType()) {
case 0:// 开台
btn_kaitai.setVisibility(View.GONE);
btn_close.setVisibility(View.VISIBLE);
btn_pingjia.setVisibility(View.GONE);
btn_service.setVisibility(View.VISIBLE);
text.setText("美发师:" + mItems.get(position).getName());
rl.setBackgroundColor(Color.GREEN);
break;
case 1:// 未开台
btn_kaitai.setVisibility(View.VISIBLE);
btn_close.setVisibility(View.GONE);
btn_pingjia.setVisibility(View.INVISIBLE);
btn_service.setVisibility(View.GONE);
text.setText(mItems.get(position).getItemTitle());
rl.setBackgroundColor(Color.WHITE);
break;
case 2:// 等待评价状态
btn_kaitai.setVisibility(View.GONE);
btn_close.setVisibility(View.VISIBLE);
btn_service.setVisibility(View.GONE);
btn_pingjia.setVisibility(View.VISIBLE);
text.setText(mItems.get(position).getName());
rl.setBackgroundColor(Color.GREEN);
break; default:
break;
}
btn_kaitai.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(mContext, "开台" + btn_kaitai.getTag(), Toast.LENGTH_SHORT).show();
}
});
btn_pingjia.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
btn_service.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
btn_close.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
new AlertDialog.Builder(mContext)
.setTitle("退出")
.setMessage("你确定强制关闭吗?")
.setCancelable(false)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int which) {
}
}).setNegativeButton("取消", null).show();
}
});
} return convertView;
}
}
代码是参照网上一位大侠写的,我写的也比较啰嗦请多指教
哥们,这个问题你解决了没。。我也碰到了,不知道咋办。
android gridview的item中第一个button点击没反应,点击其他的item上的button后才执行第一个item的button的事件
为什么btn_kaitai.setOnClickListener要注册两次,会不会是btn_kaitai.getTag()时没有获取到值?
,将其全部注释掉即可。