Android中关于GrideView,ListView的getView中position=0,错乱的问题。(在GridView的最后面添加两个固定item)

          问题是这样出现的,用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;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值