2012-07-09 70 views
0

我發現線程在人們遇到麻煩無效,因爲他們不在UI線程,調用睡眠等,但這並不適用於我。來自onContextItemSelected的代碼,在UI上運行,對不對?Android invalidate not working

case CUT_ID: 
      if(ldb.hasRights(meta.vpath)){ 
       RelativeLayout importBar = (RelativeLayout)findViewById(R.id.import_bar); 
       RelativeLayout editBar = (RelativeLayout)findViewById(R.id.edit_bar); 
       importBar.setVisibility(View.GONE); 
       editBar.setVisibility(View.VISIBLE); 
       clipboardVPath = meta.vpath; 
       ImageView thumbView = (ImageView) info.targetView.findViewById(R.id.thumbview); 
       thumbView.setImageResource(R.drawable.cut); 
       gridView.invalidate(); 

thumbView.setImageResource(R.drawable.cut);具有用剪刀符號替換gridview中的項目所需的效果。當我選擇切割另一個項目時出現問題。現在它們都有可剪裁的部分,而我只允許剪裁一件物品。這段代碼在getView在我的自定義ThumnbnailAdapter應保證我選擇的第一削減的觀點應該從陣列thumbBitmaps恢復到一個位圖:

if (thumbBitmaps.size() > position) { 
       if(meta.vpath.equals(clipboardVPath)){ 
        holder.img.setImageResource(R.drawable.cut); 
       }else{ 
        holder.img.setImageBitmap(thumbBitmaps.get(position)); 
       } 

      } 

請告訴我錯在這裏?

回答

0

我需要的是adapter.notifyDataSetChanged(); 我猜無效,GridView會詢問它是否需要重繪,如果他們認爲自己的數據是最新的,他們都回答「否」。這是我的猜測。

+1

我看到你已經找到了你的答案,但只是指出你關於在非UI線程上失效的問題:有一個方法叫做postInvalidate(),你可以從非UI線程調用它,這將正確地使其失效爲你。 – Guardanis 2012-07-09 21:57:35