Pregunta

Vamos a suponer lo siguiente:

Activity A calls Search Manager
User searches, and search results are displayed in Activity B
User clicks on a list item in Activity B 
App switches back to Activity A

Soy incapaz de manejar esta devolución de llamada de la Actividad B a la Actividad A porque no tengo la intención de búsqueda Manager (creo?).

llamada de búsqueda Manager (en la Actividad A)

public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
        case R.id.add_symbol:
            onSearchRequested(); //result of search will show Activity B
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

Atrás Ir a la actividad después de un usuario ha seleccionado un elemento de la lista

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                Quote myQuote = new Quote();
                myQuote.name = (companies.get(position).name);
                myQuote.symbol = (companies.get(position).symbol);

                //TODO: add new quote to master quote list in Main
                //TODO: serialize in Main
                //TODO: go back to last activity

                Intent myIntent = new Intent(getApplicationContext(), Main.class);
                startActivityForResult(myIntent, PICK_COMPANY_REQUEST);
            }
        });

En la Actividad Una manejar la parte posterior llamada:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PICK_COMPANY_REQUEST) {
            if (resultCode == RESULT_OK) {
                Toast toast = Toast.makeText(getApplicationContext(), "Stock added", Toast.LENGTH_SHORT);
                toast.show();
            }
        }
    }

El PICK_COMPANY_REQUEST nunca se envía a la parte posterior llamada. ¿Por qué es esto? Estoy asumiendo porque la búsqueda Manager tiene la intención y no la actividad B. ¿Cómo puedo asegurar que esto se invoca?

onActivityResult () está nunca llamó. ¿Por qué?

¿Fue útil?

Solución

Realmente seguro de si necesita llamar a un nuevo intento para su actividad principal en su OnClickListener. Dado que la actividad está ya aquí en la pila sólo se puede terminarlo

listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                Quote myQuote = new Quote();
                myQuote.name = (companies.get(position).name);
                myQuote.symbol = (companies.get(position).symbol);

                //TODO: add new quote to master quote list in Main
                //TODO: serialize in Main
                //TODO: go back to last activity

               //You need to use setresult here and pass the intent
                setResult(RESULT_OK, myIntent );
                finish();
            }
        });

Otros consejos

Me ha escrito una respuesta a lo que creo que es el mismo problema en el Android onSearchRequested () llamada de retorno a la actividad llamando

Skythe es justo que onActivityResult no se llama porque Actividad A no se inicia la actividad de búsqueda de un resultado.

Para evitar esto, hice Actividad A también define como la actvity de búsqueda (en el manifiesto), de forma que reciba la intención de búsqueda y luego lanzar manualmente la actividad B con startActivityForResult, que pasa en la consulta y dejando que la actividad B mango de la buscar de forma normal.

Se puede ver mi respuesta en el enlace de arriba o tengo una más detallada reseña en esta entrada de blog .

onActivityResult no se llama porque startActivityForResult no se utiliza para iniciar la actividad de búsqueda. Estoy atascado con este problema también y todavía tienen que encontrar una solución!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top