2013-07-31 123 views
0

在我調用了notifyDataSetChanged之後,我從onItemSelected得到的所有引用都是outofdate。如何以編程方式調用onItemSelected?

e.g

gallery.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
        int position, long id) { 
       onFront1 = (ImageView) view; 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

getView

public View getView(final int position, View convertView, 
       ViewGroup parent) { 

      imView = new ImageView(this.myContext); 

      imView.setLayoutParams(new Gallery.LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
      imView.setOnTouchListener(new OnTouchListener() { 


       public boolean onTouch(View v, MotionEvent event) { 

        ImageView view = (ImageView) v; 

        onFront2 = view; 
        return true; // indicate event was handled 
       } 
      }); 
      onFront3 = imView; 
      return imView; 
     } 

旋轉

public void rotateS(View v) { 
     ImageView iv = onFront; 
     Bitmap b = ((BitmapDrawable) iv.getDrawable()).getBitmap(); 
     Matrix matrix = new Matrix(); 
     matrix.postRotate(geg); 
     Bitmap bMapRotate = Bitmap.createBitmap(b, 0, 0, b.getWidth(), 
       b.getHeight(), matrix, true); 
     iv.setImageBitmap(bMapRotate); 
     geg = 90; 
     Log.d("rorate", "yes"); 
    } 

onFront引用老ImageView的,因此,我不能再使用它。我怎樣才能再次調用onItemselected?

一點更詳細:

我服用的ImageView和rotateS函數中使用它。它使用onFront,但用全局變量onFront1 | onFront2 | onFront3替換它onFront3
onFron1允許在屏幕上出現旋轉圖像,但在notifydatasetChanged後變爲無用。
onFront2不受notifyDataSetChanged影響,但它僅在屏幕被錄製後纔有效(優先邏輯)
onFront3完全不起作用。
我想要實現 - 保持對當前imageview的引用,並在imageview更新後立即更新它。

+0

請說清楚你的情況。你最終想達到什麼目的? – Antonio

+0

我更新了問題,你能否修改你的答案根據新的更新? – Yarh

回答

0

最好在相同的代碼塊中重新指定onFront,在那裏您調用notifyDataSetChanged

如果你不能在你的場景中做到這一點,那麼你需要額外的機制來追蹤ListAdapter中的有效載荷。

例如,您要用特定顏色標記所選項目。 可以引入的ItemData類:

public class ItemData{ 
    public bool IsSelected; 
    // some other data if you need, maybe link to the image view 
} 

您ListAdapter應該使用這些對象的列表(的ListData)和執行的getItem()方法:

public Object getItem(int i) { 
    return this.listData.get(i); 
} 

當你選擇的項目 - 在聽者你調用

((ItemData)parent.getItem(position)).IsSelected = true; 

然後,如果添加新項以上先前選擇的,你也應該裏面listData增加新的項目。先前選擇的項目的位置將改變,但關聯的ItemData實例不會。

+0

我試過了(也許以錯誤的方式),但從getView和(ImageView)視圖從onItemSelected似乎是(ImageView)視圖和 – Yarh