para - programacion android pdf 2018
Android onActivityResult es siempre 0 (3)
Esto me ha estado matando desde hace dos días. Tengo una actividad principal A que llama a una segunda actividad B. La actividad B simplemente presenta al usuario una vista de lista. Cuando presiono un elemento en la vista de lista, quiero que se pasen un par de cadenas a la actividad principal A y la actividad B finalizará.
El problema es que siempre obtengo un código de resultado de 0 y el paquete de datos es nulo. Realmente no entiendo por qué esto está sucediendo.
Aquí está mi código.
Comience la actividad B para el resultado;
Test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class);
startActivityForResult(i, RECIPE_CHOOSER);
}
});
Esto inicia la segunda multa de la actividad. La Actividad B completa una vista de lista y cuando hago clic en un elemento, estoy intentando enviar algunos datos a la Actividad de llamada A.
Cualquier texto en este momento, así que usé lo siguiente en la Actividad B;
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Bundle bundle = new Bundle();
bundle.putString("TEXT", "Please work... pleeeeaasee");
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
});
En la actividad de llamada tengo la siguiente escucha para el retorno de la siguiente manera;
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
switch(requestCode) {
//TODO
case RECIPE_CHOOSER:
Toast.makeText(getApplicationContext(), "In recipe return", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "resultCode is " + String.valueOf(resultCode), Toast.LENGTH_SHORT).show();
if (resultCode == RESULT_OK) {
Bundle b = getIntent().getExtras();
Toast.makeText(getApplicationContext(), "Returned " + b.getString("TEXT"), Toast.LENGTH_LONG).show();
}
if (resultCode == RESULT_CANCELED) {
}
break;
}
}
}
Puedo ver que el código de solicitud se devuelve correctamente, pero el código de resultado es siempre un 0 y los datos siempre son nulos.
He revisado la depuración y el setResult está haciendo su trabajo y el paquete sí tiene los datos que estoy pasando, pero se ha perdido en algún momento del camino.
¿Hay algo en el manifiesto que me falta o algo? Ha matado mi progreso en este proyecto hasta ahora.
Cualquier ayuda sería realmente apreciada.
Gracias decano
En cuanto a sus datos devueltos.
Tú lo haces:
Bundle b = getIntent().getExtras();
pero "getIntent ()" devuelve la Intención que inició ESTA actividad. Si desea que los datos devueltos de la Actividad que inició para el resultado, solo tome los datos que se pasan a
protected void onActivityResult(int requestCode, int resultCode, Intent data)
En su actividad de lista, onItemClickListener intente lo siguiente reemplazando las líneas setResult con:
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
}
else {
getParent().setResult(Activity.RESULT_OK, data);
}
Me pregunto si hay una actividad principal que es lo que necesita para vincular los datos y establecer el resultado en ...
Su código está funcionando perfectamente ........
in u Activity B
use
setResult(0, mIntent);insted of setResult(RESULT_OK, mIntent);
in your Activity A:
use
case 0: insted case RECIPE_CHOOSER: and
use System.out.println(b.getString("TEXT"));
Obtendrá salida como
Por favor trabaja ... pleeeeaasee