GridView的getChildAt(postion)获取不到指定位置的item的解决方法(动态设置指定item为选中状态)

问题描述:
有时候需要在GridView中设置某一个item为默认选中状态,对应做一些处理,
最方便的自然是用getChildAt(postion)方法直接获取item的view进行设置就行了
但是很多时候这个方法返回的view为null,用getAdapter.getview(postion,null,null)也可以获取指定位置item的view,但是并不能进行修改,是没有效果的,类似要实现下图这种进入就让第二个item为选中状态,显示下方三角箭头,图片加上外框背景,改变对应字体颜色等
这里写图片描述
这种用上述方法就不好使了,但是有一个思路很另类的方法可以完美实现,不用处理和担心item的view为空的问题,那就是重新复制一个GridView的adpter类,在需要的时候重新setadapter,在adapter中进行处理,如下图所示:
这里写图片描述
就是在adapter的重写的getview方法中进行设置,复制的adapter在加载的时候除了context,数据源list集合,再传入一个需要制定默认选中item的位置postion
代码表示如下:

 public AllGVAdapterbylevel(List<Map<String, Object>> list, Context context,int location) {
        this.list = list;
        this.context = context;
        this.pos=location;
        inflater= LayoutInflater.from(context);
    }
    、、、、、、、
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        //加载item布局 将xml布局加载到内存中,形成一个view
        if(convertView==null){ //被复用后的convertview类依然包含tag
            holder=new ViewHolder();
            convertView=inflater.inflate(R.layout.tequan_gridview_item,null);
            holder.iv_huanyuan_zuo= (ImageView) convertView.findViewById(R.id.iv_huanyuan_zuo);
            holder.zhishiyou= (ImageView) convertView.findViewById(R.id.zhishiyou);
            holder.zhishiup= (ImageView) convertView.findViewById(R.id.zhishiup);
            holder.iv_huanyuan_bg= (ImageView) convertView.findViewById(R.id.iv_huanyuan_bg);
            holder.needjifent= (TextView) convertView.findViewById(R.id.needjifent);
            if (position==0){
                holder.zhishiyou.setVisibility(View.INVISIBLE);
//                holder.zhishiup.setVisibility(View.VISIBLE);
//                holder.needjifent.setTextColor(Color.parseColor("#da408a"));
//                holder.iv_huanyuan_bg.setVisibility(View.VISIBLE);
            }
            if (position==pos){
//                holder.zhishiyou.setVisibility(View.INVISIBLE);
                holder.zhishiup.setVisibility(View.VISIBLE);
                holder.needjifent.setTextColor(Color.parseColor("#da408a"));
                holder.iv_huanyuan_bg.setVisibility(View.VISIBLE);
            }

            convertView.setTag(holder);
        }else {//convertview不为空,不为空则说明convertview包含tag
            holder= (ViewHolder) convertView.getTag();
        }
        Map<String,Object> map= (Map<String, Object>) getItem(position);
        holder.iv_huanyuan_zuo.setImageResource((Integer) map.get("img"));
        holder.needjifent.setText((String) map.get("txt"));
        itemView=convertView;
        return convertView;
    }

加载adapter时候加入位置参数:

    allGVAdapterbylevel=new AllGVAdapterbylevel(list_alltequanxian,this,levelTQ-1);

这种方法适用于一个页面有两个入口,一个就是进入页面默认选中第一个item为选中状态,第二个入口为根据用户信息动态设置item的选中状态,就可以通过这种用两个adapter的方法进行设置,绕开getChildAt方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值