1

このトピックに関する回答はありますが、その動作は他の質問と同じではありません。onActivityResultは、2回目の呼び出し時にintent data = nullを返します。

2つの異なるonClickメソッドを持つ2つのボタンを持つフラグメントがあります。各onClickメソッドはstartActivityForResult()を起動しますが、フラグメント内のonActivityResult(int requestCode、int resultCode、Intent data)メソッドでは、これらのアクティビティのうちの1つのみが正しいresultCodeを持ちます。

は私のコードと例を挙げてそれを説明してみましょう:

フラグメント:

@Override 
public void onClick(View view) { 
    int id = view.getId(); 
    switch (id) { 

     case R.id.fab: 
      Log.e(LOG_TAG, getActivity().toString()); 
      Intent intent = new Intent(getActivity(), AnadirAlimentoActivity.class); 
      startActivityForResult(intent, 2); 
      break; 

    } 
} 

このAnadirAlimentoActivityは期待どおりに動作するものです。

AnadirAlimentoActivity:

あなたは、リストに項目を追加するので終了したときは、戻るボタンをクリックすることができ、それは、この方法で発火:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(); 
    intent.putExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS, alimentosSeleccionados); 
    setResult(RESULT_OK, intent); 
    finish(); 
} 

そして今フラグメントでOnActivityResultメソッドが正しいresultCode、requestCode、およびdataで起動します

フラグメント:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 2) { 
     ArrayList<Alimento> alimentos = data.getParcelableArrayListExtra(AppConstant.LISTA_ALIMENTOS_SELECCIONADOS); 
     if (alimentos != null) { 
      for (Alimento alimento : alimentos) { 
       Log.e("alimento devuelto", alimento.getDescripcion() + " cantidad: " + String.valueOf(alimento.getCantidad()) 
         + " proc: " + alimento.getProcedencia()); 
       mAlimentos.add(alimento); 
      } 
     } 
     popularLista(); 
     isEnviarAlimento(); 
    } else { 
     if (requestCode == 3) { 
      if (data != null) { 
       String remanente = data.getStringExtra(AppConstant.INSULINA_REMANENTE); 
       if (remanente != null) { 
        _insulinaRemanente.setText(remanente); 

       } 
      } 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

その後、問題はあなたが他のボタンをクリックすると、他のアクティビティを起動する1が

フラグメント((フラグメントに過ぎなく、AsyncTask onPostExecute法の範囲内である)ということです)プライベートクラスは、AsyncTaskを拡張あり、このフラグメントのクラス内の

 @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     super.onPostExecute(aBoolean); 
     if (!aBoolean) { 
      Toast.makeText(getActivity().getApplicationContext(), "Ha ocurrido un error por favor vuelve a intentarlo", Toast.LENGTH_LONG).show(); 
     } else { 
      Intent intent = new Intent(getActivity(), MostrarInsulinaActivity.class); 
      Log.e(LOG_TAG, getActivity().toString()); 
      startActivityForResult(intent, 3); 
     } 
     if (progressDialog != null && progressDialog.isShowing()) 
      progressDialog.dismiss(); 
    } 

そして

MostrarInsulinaActivity

あなたがもう一度戻るボタンを押す

MostrarInsulinaActivity:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent _intent = new Intent(); 
    _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa"); 
    setResult(RESULT_OK, _intent); 
    finish(); 

} 

私は以前のものとしてではなく後に、正確に動作するように期待して、他のクラスのと同じようにやっていますfinish()は、正しいrequestCodeのフラグメントのOnActitivyResultメソッドを呼び出しますが、resultCode == 0とth eデータインテント=ヌル。

どうしてですか?なぜAsynTaskですか?

私は少し迷っており、ここからどこに行くのか分かりません。

は事は私の第二の活動に、私は私の設定を行う前にsuper.onBackPressed();を呼んでいたということでした..私はちょうど同じ問題に直面するかもしれない誰かのために自分の質問に答えるしたいあなたに

をそんなに

答えて

1

ありがとうございました意図これは私が作った変更であるので:

@Override 
public void onBackPressed() { 
    Intent _intent = new Intent(); 
    _intent.putExtra(AppConstant.INSULINA_REMANENTE, "holoa"); 
    setResult(RESULT_OK, _intent); 
    finish(); 
    super.onBackPressed(); 
} 
+0

おかげで、これは本当に私を助け:) –

+0

あなたはFelipeRibeiroR.Magalhaes @歓迎しています – neteot

関連する問題