我有一個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