Frage

übernehmen wir die folgende:

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

Ich bin nicht in der Lage diesen Rückruf von Aktivität B Aktivität A zu handhaben, weil ich nicht die Search Manager Absicht habe (ich glaube?).

Anruf Search Manager (in Aktivität 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);
        }
    }

Zurück zur Aktivität A nach Benutzer hat ein Listenelement ausgewählt

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 Aktivität Ein Griff der Anruf zurück:

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

Die PICK_COMPANY_REQUEST wird nie auf den Anruf zurückgeschickt. Warum ist das? Ich gehe davon aus, weil die Search Manager die Absicht hat, und nicht die Aktivität B. Wie kann ich sicherstellen, dass diese aufgerufen wird?

onActivityResult () nie aufgerufen. Warum?

War es hilfreich?

Lösung

ich wirklich Zweifel, ob Sie eine neue Absichtserklärung für Ihre Haupttätigkeit auf OnClickListener anrufen müssen. Da die Aktivität bereits hier im Stapel ist, können Sie es einfach beenden

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

Andere Tipps

Ich gab eine Antwort auf das, was ich denke, ist das gleiche Problem unter detailliertere Zuschreibung in diesem Blog-Post .

ist onActivityResult nicht genannt, weil startActivityForResult nicht verwendet wird, um die Suchaktivitäten zu starten. Ich bin auch mit diesem Problem stecken und haben noch eine Lösung zu finden!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top