莫为难 2016-01-05 11:47 采纳率: 0%
浏览 1496

Gridview的自适应高度后第一个item点击无效的问题

我在自己写GridView的时候,想弄自适应高度,然后第一个item点击无响应,
后来在网上找到方法,试了还是无效。我的代码如下:
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

@SuppressLint("NewApi")
public class CameraAdapter extends BaseAdapter {
private GridView mGridView;
private String data[] = null;
private int imgId[] = null;
private Context context;
private LayoutInflater mInflater;

public CameraAdapter(GridView mGridView, String[] data, int[] imgId,
        Context context) {
    super();
    this.mGridView = mGridView;
    this.data = data;
    this.imgId = imgId;
    this.context = context;
    mInflater = LayoutInflater.from(context);
}

@Override
public int getCount() {

    return data.length;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

public class ViewHolder {
    TextView itemText;
    ImageView itemImage;

    public TextView getItemText() {
        return itemText;
    }

    public void setItemText(TextView itemText) {
        this.itemText = itemText;
    }

    public ImageView getItemImage() {
        return itemImage;
    }

    public void setItemImage(ImageView itemImage) {
        this.itemImage = itemImage;
    }

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = null;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.grid_item, parent,false);
        // 得到GridView每一项的高度与宽度
        if (mGridView.getNumColumns() == 2) {
            convertView.setLayoutParams(new GridView.LayoutParams(
                    android.view.ViewGroup.LayoutParams.FILL_PARENT,
                    mGridView.getHeight() / 2));
        } else if (mGridView.getNumColumns() == 3) {
            convertView.setLayoutParams(new GridView.LayoutParams(
                    android.view.ViewGroup.LayoutParams.FILL_PARENT,
                    mGridView.getHeight() / 3));
        } else if (mGridView.getNumColumns() == 4) {
            convertView.setLayoutParams(new GridView.LayoutParams(
                    android.view.ViewGroup.LayoutParams.FILL_PARENT,
                    mGridView.getHeight() / 4));
        }
        viewHolder = new ViewHolder();
        viewHolder.itemText = (TextView) convertView
                .findViewById(R.id.itemText);
        viewHolder.itemImage = (ImageView) convertView
                .findViewById(R.id.itemImage);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
        // 得到GridView每一项的高度与宽度
        if (mGridView.getNumColumns() == 2) {
            convertView.setLayoutParams(new GridView.LayoutParams(
                    android.view.ViewGroup.LayoutParams.FILL_PARENT,
                    mGridView.getHeight() / 2));
        } else if (mGridView.getNumColumns() == 3) {
            convertView.setLayoutParams(new GridView.LayoutParams(
                    android.view.ViewGroup.LayoutParams.FILL_PARENT,
                    mGridView.getHeight() / 3));
        } else if (mGridView.getNumColumns() == 4) {
            convertView.setLayoutParams(new GridView.LayoutParams(
                    android.view.ViewGroup.LayoutParams.FILL_PARENT,
                    mGridView.getHeight() / 4));
        }
    }
    if (position == 0) {
        parent.postInvalidate();
    }
    viewHolder.itemText.setText(data[position]);
    viewHolder.itemImage.setImageResource(imgId[position]);

    //
    return convertView;
}

}

谁能指点下,到底还有哪里需要修改吗?

  • 写回答

2条回答 默认 最新

  • LZ_Luzhuo 博客专家认证 2016-01-05 16:35
    关注

    GridView有一些bug.
    为什么不用RecycleView?RecycleView能完美的自适应高度.
    http://blog.csdn.net/rozol/article/details/50225593

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能