2014-06-29 48 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