我有一个GriView,其中填充了项目,并且在单击gridview上的项目时,我将后台资源更改为我在res文件夹中的图像。我的问题是当滚动并返回到所选项目时,它不再具有后台资源。相反,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);
}
});
我非常感谢任何帮助!
答案 0 :(得分:0)
好像你没有考虑视图回收如何在适配器中工作。使用适配器视图在滚动期间被回收,这是用于渲染您刚刚单击的项目的相同视图,应该在滚动操作后重新用于渲染另一个项目。
您应该自己定义自己的适配器类并管理所选/未选择的状态(例如:使用具有相同数据大小的布尔数组)并通过BaseAdapter.getView(int, View, ViewGroup)
正确设置/重置背景。这是一个非常基本的主题,您将在Official Android Developers Portal