GridView的getChildAt(postion)获取不到指定位置的item的解决方法(动态设置指定item为选中状态)
2017-09-04 18:13
811 查看
问题描述:
有时候需要在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
代码表示如下:
加载adapter时候加入位置参数:
这种方法适用于一个页面有两个入口,一个就是进入页面默认选中第一个item为选中状态,第二个入口为根据用户信息动态设置item的选中状态,就可以通过这种用两个adapter的方法进行设置,绕开getChildAt方法
有时候需要在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.zhishiy aaf2 ou.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方法
相关文章推荐
- input设置为disabled提交后获取不到该值的解决方法
- 多tab页切换保存各个fragment状态(包括listView/GridView滑动位置)的最佳解决方法
- Error:当GridView编辑状态获取新值时,往往获取的是修改前的值 问题原因及解决方法
- 固定列数,根据item数量动态设置GridView高度的方法
- ListView 在getView()中设置一个item中的TextView的动态显示出现其它的也显示的bug解决方法
- [图解]在输入框和文本框中获取和设置光标位置,以及选中文本和获取选中文本值的方法 --- 详解,兼容所有浏览器。
- input设置为disabled提交后获取不到该值的解决方法
- 解决GridView动态设置宽高导致第一个item点击不响应或显示不正常问题
- input设置为disabled提交后获取不到该值的解决方法
- Adapter item 中设置监听和抽象方法及Activity中调用Adapter中监听的方法,获取item中postion
- ASP.NET获取不到JS设置cookies的解决方法
- ASP.NET获取不到JS设置cookies的解决方法
- listView/GridView getChild获取不到的解决方法
- 微信分享动态设置title desc取不到值的原因及解决方法
- input设置为disabled提交后获取不到该值的解决方法
- [前端_EasyUI]给easyui的datebox设置默认值,获取不到 的解决方法
- asp.Net2.0中TextBox设置只读后后台获取不到值的解决方法
- ASP.NET获取不到JS设置cookies的解决方法
- Android GridView之添加分隔线,动态设置高度,实现高度自适应,并解决第一个item不显示的问题