我有一个GriView,里面填充了项目,点击gridview上的项目我将背景资源更改为res文件夹中的图像。我的问题是滚动和回到选定的项目,它不再有背景资源。相反,一些gridview的其他项目获取背景。Gridview项目上滚动的背景资源
在我的onCreate方法,我有以下的代码来填充我的GridView:
编辑基于我有我创建了一个自定义的适配器和填充gridview的建议。我现在的问题是,没有我的GridView元素现在填充。当我设置适配器时,我传递一个布尔数组和一个数据数组。数据数组包含应该用于填充GridView的所有数据,并且布尔数组用于确定网格项是否已被选中。
编辑:即使在滚动之后,现在已选中的GridView元素也会高亮显示,但现在其他从未被选中的元素似乎会突出显示。
这里是适配器类:
public class HoursAdapter extends BaseAdapter {
private Context mContext;
private boolean isSelected[];
private String hours[];
public HoursAdapter(Context c, boolean selected[], String hours[]){
this.isSelected = selected;
this.mContext = c;
this.hours = hours;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return hours.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if(convertView==null){
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.hourview_item, null);
holder = new ViewHolder();
holder.hours =(TextView) convertView.findViewById(R.id.hours_text);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
if(isSelected[arg0-1])
holder.hours.setBackgroundResource(R.drawable.item_background_focused);
holder.hours.setText(hours[arg0-1]);
return convertView;
}
static class ViewHolder{
TextView hours;
}
}
这我设立的适配器代码:
HoursAdapter adapter = new HoursAdapter(this,isSelected,data);
hoursView.setAdapter(adapter);
hoursView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
// TODO Auto-generated method stub
v.setBackgroundResource(R.drawable.item_background_focused);
}
});
我将不胜感激任何帮助!
所以每次我滚动视图得到回收我猜。所以当我最初通过构造函数设置适配器时,我需要传递布尔数组吗?因为我认为只有在最初设置gridview并使用项目填充它时才调用适配器类。 – AndroidDev93 2013-04-20 20:34:01
只有从视口出来的视图才会被回收。该适配器被调用一次,是正确的,但你需要弄清楚它是如何工作的,以实现你想要的。例如http://developer.android.com/guide/topics/ui/layout/gridview.html涵盖了关于这方面的基本信息。 – 2013-04-20 20:44:04
我做了一些修改并创建了我自己的适配器。我读到,我们必须创建自己的视图持有者,并使用get/set标签来跟踪哪些项目具有背景资源。但是现在我的gridView中没有任何项目被填充。我在上面的代码中添加了更改。 – AndroidDev93 2013-04-20 21:05:09