我一直在努力解決這個問題兩天,並沒有發現任何有用的在線。 我的設置是這樣的,我有一個Gridview,我用API填充圖像。現在GridView的每個單元格都包含一個按鈕,點擊時應該爲該單元格添加一個疊加層。這是通過webservice根據值動態完成的。現在的問題是,當我向上或向下滾動添加到其他單元格的疊加層時,我該如何解決這個問題?通過適配器保存動態添加視圖的狀態
我已經試過什麼:
我已經試過這是通過使用保存位置保存複選框的狀態SparseBooleanArray解決方案,但因爲我有保持掙扎這種方法不能解決問題視圖的狀態完好無損。
我懷疑什麼:
的代碼通過一個被稱爲按鈕的點擊方法增加覆蓋。我使用點擊位置通過gridView.getChildat(position)獲取單元格,並將疊加層作爲子元素添加到它。我認爲我的convertView沒有更新,這就是爲什麼覆蓋層繼續繪製不同的單元格位置。
相關代碼:
這是我getView方法中,
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_image_row, null);
holder = new Holder();
holder.iv_product_image = (ImageView) convertView.findViewById(R.id.id_iv_product_image) ;
RelativeLayout.LayoutParams iv_product_image_params = new RelativeLayout.LayoutParams(imageWidth,imageHeight) ;
holder.iv_product_image.setLayoutParams(iv_product_image_params) ;
iv_product_image_params = null ;
holder.iv_loader_image = (ImageView) convertView.findViewById(R.id.id_iv_loader_image) ;
holder.bt_expand_save_overlay = (CheckBox) convertView.findViewById(R.id.id_bt_expand_save_overlay) ;
holder.tv_productname = (TextView) convertView.findViewById(R.id.id_tv_productname) ;
customFonts.SetSoureLightFont(holder.tv_productname) ;
holder.tv_sellingprice = (TextView) convertView.findViewById(R.id.id_tv_sellingprice) ;
customFonts.SetSoureLightFont(holder.tv_sellingprice) ;
holder.tv_price = (TextView) convertView.findViewById(R.id.id_tv_price) ;
customFonts.SetSoureRegularFont(holder.tv_price) ;
holder.parent_cell = null;
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
編輯:這是我如何設置標籤與位置...
if (session.isLoggedIn()) {
holder.bt_expand_save_overlay.setTag("1,"+position) ;
int i=0;
for (i=0; i<savedItemsHashMap.size(); i++) {
HashMap<String,String> savedItems = new HashMap<String, String>() ;
savedItems = savedItemsHashMap.get(i) ;
if (savedItems.get(GlobalVariables.KEY_PRODUCT_ID).equals(mapStr.get(GlobalVariables.KEY_ID))) {
holder.bt_expand_save_overlay.setButtonDrawable(R.drawable.wishlist_saved_drawable) ;
break ;
}
}
if (i==savedItemsHashMap.size()) {
holder.bt_expand_save_overlay.setButtonDrawable(R.drawable.wishlist_unsaved_drawable) ;
}
} else {
holder.bt_expand_save_overlay.setTag("0,"+position) ;
}
這是怎麼了我綁定點擊監聽器裏面的getView,我保存在標籤中的位置。
holder.bt_expand_save_overlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String getTagString = (String)v.getTag() ;
String [] items = getTagString.split(",");
selectedExpandButton = Integer.valueOf(items[1]) ;
ExpandSaveForLaterOverlay (selectedExpandButton) ;
}
的ExpandSaveForLaterOverlay添加視圖到選定單元格,但滾動的時候,這並不停留在同一個孩子。
在此先感謝您的幫助或提示!
更新:我檢查了谷歌播放音樂應用程序,他們有相同的設置。他們有一個按鈕的gridview,顯示一個菜單覆蓋點擊。但是在滾動菜單之前,它不可見,只有在它滾動之後。有沒有辦法在視圖實例本身保存覆蓋?
你是否爲所有項目添加了相同的疊加層? – keshav
ExpandSaveForLaterOverlay類根據項目的ID添加兩種或三種佈局。儘管如此,如果佈局相同,那麼同樣的問題仍然存在。 –