补充一下我用的开发api版本是4.0.3,如有愿意进一步了解讨论的加我qq 969298114

解决方案 »

  1.   

    我用的是BaseAdapter,getview里的position默认就是从0开始的,我也没改
      

  2.   

    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;
    }
    }
    代码是参照网上一位大侠写的,我写的也比较啰嗦请多指教
      

  3.   

    现在主要是btn_pingjia按钮的问题,其他的可以忽略不计
      

  4.   

    一哥们在真机上运行没有这种情况,我在pid上就不行了
      

  5.   

    我也遇到同样的问题,点击其他item时,第一个item的click事件才能响应,是gridview控件的问题吗,楼主解决了吗?
      

  6.   


    哥们,这个问题你解决了没。。我也碰到了,不知道咋办。
    android gridview的item中第一个button点击没反应,点击其他的item上的button后才执行第一个item的button的事件
      

  7.   

    我也遇到过此问题,不知道原因是啥,不过可以解决,将btn的点击事件转移到gridview中即可,gridview.setOnItemClickListener(listener);
      

  8.   


    为什么btn_kaitai.setOnClickListener要注册两次,会不会是btn_kaitai.getTag()时没有获取到值?
      

  9.   

    我也遇到了此问题,最终找出了原因:不要对 Adapter中的 convertView 对象进行任何样式变更操作(即GridView子视图的根元素样式不要在代码中去动态变更),我之前是在每次getView方法执行时,对 convertView 对象重新配置了LayoutParams,导致出现此问题。后来将其去掉就正常了。楼主的代码,中对convertView 设置了背景颜色(“rl.setBackgroundColor(Color.GREEN);”),我也测试了同样能引发此问题
     ,将其全部注释掉即可。