Android Adapter问题探究

chenchenchenliu 2016-08-14 10:38:38
大家好,最近在做Android项目,在实现类似驾考宝典里面查看所有试题题号的功能。适配器不可避免要使用,但在使用过程中遇到两个问题。
有一个gridview,里面放的是所有试题题号,默认是不显示的,当我点击界面按钮时显示gridview,同时设置已经做过的题目样式,如果试题已作答,则在gridview对应的题号item改变背景以示作答。
第一个问题,girdview中的第一个item修改背景不起作用。
第二个问题,必须要先让gridview显示一次(只要显示一次即可,后面无论gridview是显示还是隐藏,设置item都有效),然后在设置item背景样式才起作用,否则没效果。请各位帮帮忙,实在是烦躁。

我是自定义的适配器,在适配器中我还定义了一个设置item背景色的方法A();,我发现调用A()方法时,还未执行getView()方法,这样在设置背景样式自然不管用,但不清楚为什么。

以下是自定义适配器的部分代码:

/**存储所有item,key:位置;value:Item中的控件*/
private Map<Integer, TextView> items;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = inflater.inflate(R.layout.item_text, null);
}
TextView result = (TextView) convertView.findViewById(R.id.item_text_title);
result.setText(datas[position]);

items.put(position, result);

return convertView;
}
/**
* 设置作答正确时的样式
* @param position
*/
public void changeCorrectStyle(int position){
if(items == null || items.size() <= 0){
return;
}

TextView tvItem = items.get(position);
tvItem.setBackground(context.getResources().getDrawable(R.drawable.shape_green));
}

...全文
218 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a784063999 2016-08-18
  • 打赏
  • 举报
回复
第二個問題: 是因為你不顯示是不會調用getView去創建view 我知道ListView有回收機制, gridview應該也有吧 如果和ListView一樣, gridview會把沒有顯示在界面的view回收, 等view不夠用時再把回收了的view傳給getView 第一個問題: 如果你想個別的item不同的顏色, 你定義個變量或數組來儲存不同顏色的item索引, 在getView裏根據那變量或數組來改顏色
睡精灵 2016-08-18
  • 打赏
  • 举报
回复
引用 4 楼 chenchenchenliu 的回复:
[quote=引用 2 楼 shuijinglingsos 的回复:] 又事这样的问题。 不要直接去修改item的view,而是设置数据的状态,在getview里去判断数据状态,去改变view的样式。
为社么要这样去改这样才有效呢,能解释一下吗[/quote] 因为gridview的显示机制,gridview里面的项目显示时根据getview里面的逻辑,而且是复用的,直接更改view而不改变数据的话,一旦gridview刷新会重新调用getview方法,view的改动就又变回来。
chenchenchenliu 2016-08-16
  • 打赏
  • 举报
回复
引用 1 楼 notbb 的回复:
没做过,帮你顶起。结贴给点支持分哦
结贴时散分,
chenchenchenliu 2016-08-16
  • 打赏
  • 举报
回复
引用 3 楼 a81658804 的回复:
你指的默认不显示是怎么不显示的?设置items为空?还是把gridview整个隐藏掉? 还有就是为什么用map?不用arraylist?
GridView控件实在弹出框中的,运行Activity时是不显示弹出框的,所以Gridview整体处于隐藏状态。 第二个问题:在执行getView时会出现多次执行第一个位置的Item的情况,避免数据重复所以用map
chenchenchenliu 2016-08-16
  • 打赏
  • 举报
回复
引用 2 楼 shuijinglingsos 的回复:
又事这样的问题。 不要直接去修改item的view,而是设置数据的状态,在getview里去判断数据状态,去改变view的样式。
为社么要这样去改这样才有效呢,能解释一下吗
a81658804 2016-08-14
  • 打赏
  • 举报
回复
你指的默认不显示是怎么不显示的?设置items为空?还是把gridview整个隐藏掉? 还有就是为什么用map?不用arraylist?
睡精灵 2016-08-14
  • 打赏
  • 举报
回复
又事这样的问题。 不要直接去修改item的view,而是设置数据的状态,在getview里去判断数据状态,去改变view的样式。
轻鸿万里 2016-08-14
  • 打赏
  • 举报
回复
没做过,帮你顶起。结贴给点支持分哦

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧