2014-06-29 45 views
0

我有2个活动A,B和两个在他们使用onActivityResult()错误onActivityResult()被调用

的过程:

  1. 在一个onActivityResult()工作的罚款。
  2. 我有两个onActivityResult()(在下面的代码中显示)在活动B。第一个作为可点击TextView这也正常工作。另一个为Button

我面对的问题是在Button中,它假设从B的子活动中引入位图并在B中的ImageView中显示。当我点击按钮,它带我到活动A的onActivityResult()

startActivityForResult()在活动B的按钮:

int capSig = arg0.getId(); 
if(capSig == R.id.capSig)  //Button which takes me to sub-activity of B 
{ 
    Intent goToCapSignatures = new Intent(this, CaptureSignature.class); 
    startActivityForResult(goToCapSignatures, GET_SIG); 

} 

如何我改变ByteArray的位图和发送位图到活动B:

Bitmap returnedBitmap = Bitmap.createBitmap(mContent.getWidth(), 
       mContent.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(returnedBitmap); 
     Drawable bgDrawable = mContent.getBackground(); 
     if (bgDrawable != null) 
      bgDrawable.draw(canvas); 
     else 
      canvas.drawColor(Color.WHITE); 
     mContent.draw(canvas); 

     ByteArrayOutputStream bs = new ByteArrayOutputStream(); 
     returnedBitmap.compress(Bitmap.CompressFormat.PNG, 50, bs); 
     byte[] byteArray = bs.toByteArray(); 
     Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray , 0, byteArray.length); 



     //send the captured signature to Check and Operations page 
     Intent returncapSigIntent = new Intent(); 
     returncapSigIntent.putExtra("signature",bitmap); 
     setResult(RESULT_OK, returncapSigIntent); 
     finish(); 

在活动B onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
     if (requestCode == GET_NOTES)  // For textview (working fine) 
     { 
     if(resultCode == RESULT_OK) 
     { 
      if (data.hasExtra("notes ready")) 
     { 
      String readyNotes = data.getExtras().getString("notes ready"); 
      showNotesFromNotesClass.setText(readyNotes); 
     } 
     } 

     if (requestCode == GET_SIG)   // for Button - this isn't being 
                 called instead 
     { 
      if(resultCode == RESULT_OK) 
      { 
      if (data.hasExtra("signature")) 

       //display Bitmap in an ImageView 

       capturedSigImageFromCapSigclass = (Bitmap) data.getExtras().get("signature"); 
       imgSig.setImageBitmap(capturedSigImageFromCapSigclass); 
      } 
      } 

    } 
     } 
} 
活动A中的

onActivityResult():(这被称为改为。

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

     if (resultCode == RESULT_OK && requestCode == REQUEST_APPLIANCE) { 
     if (data.hasExtra("selected appliance")) 
     { 
      String selectedAppType = data.getExtras().getString("selected appliance"); 
      tvApplianceType.setText(selectedAppType); 
      Toast.makeText(this, data.getExtras().getString("selected appliance"), 
      Toast.LENGTH_SHORT).show(); 
     } 
     } 
    } 

我确定我正在做一些工作。请给我一些指点或指导,我会错误的。这将是非常感谢,因为我已经花了几天在这个逻辑,没有得到任何地方。谢谢

回答

0

您可以简单地更改每个活动的requestCode值,以确保只有一个被调用。

requestsCode只是int常量,它们只是代表!

private static final int GET_NOTES = 0; 

... 

private static final int GET_SIG = 1; 
... 

private static final int REQUEST_APPLIANCE = 2; 

这应该足够多样化的结果

+0

感谢回答伴侣。你的意思是像'if(resultCode == RESULT_OK && requestCode == 2)'那样在我的代码'onActivityResult()'中改变'requestCode'? – user3677683

+0

不,你必须在声明变量GET_NOTES,GET_SIG和REQUEST_APPLIANCE的地方更改它,只要确保它们代表不同的数字(它们必须在活动调用者和获得结果的活动中相同) –

+0

我已经完成了,但是仍然无法工作。请记住,REQUEST_APPLIANCE在一个类中,而GET_NOTES和GET SIG在不同的类中。是不是因为我在两个不同的类中有他们? – user3677683