我具有與本片段的活性加載一個GridView。 GridView本身不在Fragment中。我通過BaseAdapter創建了一個客戶適配器,並且一切都很好用。更新的GridView子
CustomerAdapter.java
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView v = new ImageView(activity);
Bitmap bmp = getBitmap(videoIds[ position ]);
v.setImageBitmap(bmp);
v.setAdjustViewBounds(true);
v.setPadding(5, 5, 5, 5);
v.setId(position);
thumbnails[ position ] = bmp;
return v;
}
我有一個上下文行動起來吧,讓你選擇的視頻被上傳,刪除等
videoGallery.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL);
videoGallery.setMultiChoiceModeListener(new MultiChoiceModeListener() { ... }
我要添加視頻周圍邊框當選擇填充時,我需要做的就是添加背景顏色。所以我在上面列出的新的MultiChoiceModeListener()部分中有:
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
ImageView image = (ImageView)videoGallery.findViewById(position);
if(checked) {
image.setBackgroundColor(Color.YELLOW);
} else {
image.setBackgroundColor(Color.TRANSPARENT);
}
int count = videoGallery.getCheckedItemCount();
if(count == 1) {
mode.setSubtitle("1 item selected.");
} else if(count != 0) {
mode.setSubtitle(count + " items selected.");
} else {
mode.setSubtitle(null);
}
}
問題是子視圖不更新。標題被更新爲「選擇了1項,選擇了2項等),所以我知道該方法正在被調用,並且設置背景確實會產生背景,所以並不是我只是無法看到變化。本身沒有更新。我甚至設置的意見隨機ID被創建時,做image.getId()提供了正確的ID,所以我知道它是找到的看法。這是不更新它。任何幫助嗎?
不是一個確切的回答你的問題,但它可能是更容易使用國家列表繪製,這裏http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList的解釋那麼系統會自動爲您處理。 – 2012-08-07 19:28:42
當調用onItemCheckedStateChange()時,系統是否足夠聰明以自動觸發狀態變化?因爲我無法從代碼中觸發任何東西,這就是我的問題所在。 – 2012-08-07 19:38:05
是的,當該項目被選中時,視圖將被重新繪製,對應於可繪製狀態列表中的「checked」狀態的drawable。您可能需要在videoGallery上調用setItemChecked(position,true),但這不太可能。 – 2012-08-07 19:50:05