Domanda

Supponiamo la seguente:

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

Non sono in grado di gestire questo callback da Activity B a Activity A perché non ho l'intenzione Search Manager (credo?).

Chiamata Ricerca Manager (in attività 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);
        }
    }

Torna alle Attività A dopo che l'utente ha selezionato un elemento della 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);
            }
        });

In attività una maniglia sul retro chiamata:

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();
            }
        }
    }

Il PICK_COMPANY_REQUEST non viene mai inviato alla schiena chiamata. Perchè è questo? Io parto dal presupposto perché la ricerca Manager ha l'intento, e non attività B. Come posso fare in modo che questo viene invocato?

onActivityResult () non viene mai chiamato. Perché?

È stato utile?

Soluzione

Mi è dubbio se è necessario chiamare un nuovo intenti per la vostra attività principale sul tuo onclickListener. Dal momento che l'attività è già qui nello stack si può semplicemente finisci

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();
            }
        });

Altri suggerimenti

ho postato una risposta a quello che penso sia lo stesso problema a Android onSearchRequested () di callback per l'attività di chiamare

skythe è giusto che onActivityResult non è chiamato perché l'attività A non sta iniziando l'attività di ricerca di un risultato.

Per ovviare a questo, ho fatto Attività Un anche definita come l'actvity ricercabile (nel manifesto), in modo che riceva l'intento di ricerca e quindi avviare manualmente Attività B con startActivityForResult, passando nella query e lasciando la maniglia attività B la la ricerca come normale.

È possibile vedere la mia risposta al link qui sopra o ho un più dettagliate write-up in questo post del blog .

onActivityResult non è chiamato a causa startSubActivity non viene utilizzato per avviare l'attività di ricerca. Mi sono bloccato con questo problema come bene e hanno ancora trovato una soluzione!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top