2014-06-29 1 views
0

У меня есть 2 действия A, B и оба используются в них onActivityResult().WRONG onActivityResult() называется

Процесс:

  1. onActivityResult() в А работает штрафы.
  2. У меня есть два onActivityResult() (показано в коде ниже) в действии B. Первый из них как clickable TextView, который также отлично работает. Другой - Button.

Проблема, с которой я столкнулся, заключается в кнопке, которая предполагает принести растровое изображение из суб-активности B и отображения в ImageView в B.. При нажатии кнопки она принимает меня к 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 в растровое изображение и отправка Bitmap на активность 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(); 

onActivityResult() в активность B:

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); 
      } 
      } 

    } 
     } 
} 

onActivityResult() в действии A: (Это вместо того, чтобы называться.

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 для каждого действия, чтобы убедиться, что только один вызван для уверенности.

requestCode - это просто константы, они только представители!

private static final int GET_NOTES = 0; 

... 

private static final int GET_SIG = 1; 
... 

private static final int REQUEST_APPLIANCE = 2; 

Это должно быть достаточно, чтобы разнообразить результаты

+0

Спасибо за ответ мат. Вы имеете в виду изменение 'requestCode' в моем коде' onActivityResult() 'like' if (resultCode == RESULT_OK && requestCode == 2) '? – user3677683

+0

Нет, вам нужно изменить его там, где объявлены переменные GET_NOTES, GET_SIG и REQUEST_APPLIANCE, просто убедитесь, что они представляют разные числа среди них (они должны быть одинаковыми в вызывающем объекте и в действии, который получает результаты) –

+0

Я сделал так, как предположил, однако все еще не работает. Пожалуйста, имейте в виду, что REQUEST_APPLIANCE находится в одном классе и GET_NOTES AND GET SIG как в другом классе. что это не работает, потому что я имею их в двух разных классах? – user3677683