问题是这样出现的,用gridview,尾部添加两个固定item(增加和删除按钮),然后当数据只有两条的时候,加上加号和减号等于一共4条,第三个item原本应该为+号,却显示头像,点击事件又是是正常的。于是在adapter的getview方法打印了下position,看看有没有什么发现,还真发现了个奇怪的地方, 0 被多次打印。
问题有苗头了就可以去查咯。
问题有苗头了就可以去查咯。
有人说,无论是listview还是gridview,自定义adapter 的position总是为0,有点意思,issuer 说这是 android渲染和调用方式导致的,具体是因为高度设置不够,在渲染的时候会测量高度,如果高度不够的话会停止渲染后面的 ,excuse me?别急,他后面还说了,这种情况会有奇怪的调用出现,还会继续调用getview??? ,但每次的position都是0 ,这个我看看就好,试过并没有什么软用。
具体解决方法,以及设置固定item(加号,减号)的方法如下:
class GroupGridView_Adapter extends BaseAdapter { private List<GroupInfoBean.AllBean> lists; private Context context;//承接上下文 private boolean isCreated = true;//判断是否是群的创建者 public GroupGridView_Adapter(List<GroupInfoBean.AllBean> lists, Context context) { this.lists = lists; this.context = context; } public void setData(List<GroupInfoBean.AllBean> lists, String getIsgroupmanager) { if (getIsgroupmanager.equals("1")) { isCreated = true; } else { isCreated = false; } if (lists.size() >= 20) { this.lists = lists.subList(0, 19); } else { this.lists = lists; } this.lists = lists; notifyDataSetChanged(); } public List<GroupInfoBean.AllBean> getData() { return lists; } //返回集合的数量 @Override public int getCount() { if (isCreated) { //是创建者的话就多添加两个item return lists.size() + 2; } else { //不是的话添加一个拉人进群item return lists.size() + 1; } } //返回当前数据 @Override public Object getItem(int position) { return lists.get(position); } //获取当前ID @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_group_gridview, null); holder = new ViewHolder(); holder.iv_head_img = (ImageView) convertView.findViewById(R.id.iv_gridview_head); holder.tv_nickname = (TextView) convertView.findViewById(R.id.tv_gridview_nickname); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (parent.getChildCount() == position) { //里面就是正常的position // 群主:最后一个item,踢人按钮 if (isCreated && position == getCount() - 1) { holder.tv_nickname.setText(""); holder.iv_head_img.setImageResource(R.drawable.delete_group_nor_sel); holder.iv_head_img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //点击减号 } }); } else if ((isCreated && position == getCount() - 2) || (!isCreated && position == getCount() - 1)) { //添加群成员 holder.tv_nickname.setText(""); holder.iv_head_img.setImageResource(R.drawable.add_group_nor_sel); holder.iv_head_img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //点击加号 } }); } else { //普通会员 holder.tv_nickname.setText(lists.get(position).getNickName()); //头像设置,我自己是这样写的: GlideUtils.getInstance().LoadContextRoundBitmap(context, lists.get(position).getUserHeadImg(), holder.iv_head_img, 5); } } return convertView; } class ViewHolder { /** * 头像 */ ImageView iv_head_img; /** * 昵称 */ TextView tv_nickname; } }