programacion - manual de android en pdf
onActivityResult() no se llama (6)
onActivityResult()
no es llamado. A continuación se muestra mi código:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we''re responding to
Log.e("CALLED", "OnActivity Result");
if (requestCode == TEAM_SELECTED_REQUEST_CODE) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
try {
mySelectedTeam = getIntent().getStringExtra("teamName");
txtSelectTeamCreateMatch.setText(mySelectedTeam);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Aquí estoy iniciando el SelectTeamActivity
:
Intent intent=new Intent(CreateMatch.this,SelectTeamActivity.class);
startActivityForResult(intent, TEAM_SELECTED_REQUEST_CODE);
//overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
Intent intent = getIntent();
intent.putExtra("teamID", teamDataList.get(position).getTeamId().toString());
intent.putExtra("teamName", teamDataList.get(position).getTeamName().toString());
setResult(1, intent);
Opción 1 :
Si está llamando a startActivityForResult()
desde el Fragment
, debe llamar a startActivityForResult()
y no a getActivity().startActivityForResult()
, ya que resultará en Fragment
''s onActivityResult()
.
Si no está seguro de a dónde está llamando en startActivityForResult()
y cómo llamará a los métodos.
Opcion 2:
Dado que la Activity
obtiene el resultado de onActivityResult()
, deberá anular el onActivityResult()
la Activity
y llamar a super.onActivityResult()
para propagarse al Fragment
respectivo para los códigos de resultados no super.onActivityResult()
o para todos.
Si las 2 opciones anteriores no funcionan, consulte la opción 3, ya que definitivamente funcionará.
Opción 3:
La llamada explícita de Fragment
a onActivityResult()
funciona de la siguiente manera
En la clase de Activity
principal, anule el onActivityResult()
e incluso anule el mismo en la clase Fragment
y llame al siguiente código.
En la clase padre:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.dualPane);
fragment.onActivityResult(requestCode, resultCode, data);
}
En clase infantil:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//in fragment class callback
}
Acabo de tener el mismo problema y me sorprende que ninguna de las soluciones que he visto haya mencionado lo siguiente:
El valor de la constante RESULT_OK es -1, y si da el valor de 1 en el método setResult, entonces el código de resultado no sería igual al RESULT_OK y la condición no se procesaría. Espero que alguien encuentre esto útil.
Tuve el mismo problema y lo resolví agregando estos parámetros a la actividad:
AlwaysRetainTaskState = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop
Tuve el mismo problema. Mi actividad de llamada fue ''singleInstance''. Eliminando eso resolví mi problema.
onActivityResult llamó pero usando una referencia de intención errónea para obtener datos de la intención de resultado:
getIntent().getStringExtra("teamName")
Reemplazar con esto:
data.getStringExtra("teamName")
Aquí los datos son el resultado del intento.
android:noHistory="true"
mi problema eliminando android:noHistory="true"
de AndroidManifest.xml
.