Question

Supposons que les éléments suivants:

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

Je suis incapable de gérer ce rappel de l'activité B à l'activité A parce que je n'ai pas l'intention de recherche Manager (je pense?).

Appel Recherche Manager (dans l'activité 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);
        }
    }

Retour Aller à l'activité A après que l'utilisateur a sélectionné un élément de liste

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

Dans l'activité d'une poignée à l'arrière d'appel:

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

Le PICK_COMPANY_REQUEST est jamais envoyé à l'arrière d'appel. Pourquoi est-ce? Je suppose que le directeur de recherche a l'intention, et non B. Activité Comment puis-je assurer que cela s'invoqué?

onActivityResult () est jamais appelé. Pourquoi?

Était-ce utile?

La solution

Je doute vraiment si vous avez besoin d'appeler une nouvelle intention de votre activité principale sur votre onclickListener. Étant donné que l'activité est déjà là dans la pile, vous pouvez simplement le terminer

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

Autres conseils

Je posté une réponse à ce que je pense est le même problème à plus détaillée en écriture dans ce billet de blog .

onActivityResult n'est pas appelé parce que startActivityForResult n'est pas utilisé pour démarrer l'activité de recherche. Je suis coincé avec ce problème aussi bien et il va falloir trouver une solution!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top