2015-12-02 126 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

相关问题