studio programacion herramientas fundamentos con avanzado aplicaciones android android-fragments onactivityresult

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 .