2015-12-02 112 views
0

我有兩個活動,A和B.我從A的片段開始B,名爲F.我在B中有一個位圖對象。我需要傳遞此位圖的Uri到F下面是示例代碼, 此代碼是在F:將位圖Uri傳遞給另一個活動的片段

Intent bIntent = new Intent(getActivity(), B.class); 
startActivityForResult(bIntent , 111); 

此代碼是在B:

Intent aIntent = new Intent(B.this, A.class); 
aIntent.putExtra("image", uri); 
setResult(RESULT_OK, aIntent); 
finish(); 

再次,這代碼是在F:

if(requestCode == 111 && resultCode==Activity.RESULT_OK && data != null) { 
     Bundle extras = getActivity().getIntent().getExtras(); 
     if (extras != null) { 
      Uri path = (Uri) extras.get("image"); 
      ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage); 
      iv.setImageURI(path); 
     }    
} 

但它不起作用。一般情況下,我需要正確的代碼。

+0

您傳遞了錯誤的意向對象的setResult – Bhargav

回答

3

默認情況下,Android Uri類擴展了parcelable接口。你可以把插入烏里與getParcelableExtra方法是這樣的:

Uri path = getActivity().getIntent().getParcelableExtra("image"); 
if(path != null) { 
    ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage); 
    iv.setImageURI(path); 
} 

或者以自己的方式:

Bundle extras = getActivity().getIntent().getExtras(); 
     if (extras != null) { 
      Uri path = (Uri) extras.getParcelable("image"); 
      if(path != null) { 
       ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage); 
       iv.setImageURI(path); 
      } 
     }   

編輯:嘗試後你打電話iv.invalidate圖像重置爲這樣:

Uri path = result.getParcelableExtra("image"); 
    if(path != null) { 
     ImageView iv = (ImageView) getActivity().findViewById(R.id.myImage); 
     iv.setImageURI(path); 
     iv.invalidate(); 
    } 

EDIT2:我只是意識到活動B中有一個錯誤。嘗試改變並確保您使用的意圖結果是onActivityResult而不是GetActivity的參數

setResult(RESULT_OK, editIntent); 

setResult(RESULT_OK, aIntent); 
+0

對不起。再次它不起作用。 – Mariox

+0

你好,你可以嘗試在設置圖像後調用iv.invalidate()? –

+0

嗨Orkun,謝謝你的回答。但它似乎(路徑!= null)條件返回false! – Mariox

相關問題