Comment gérer le rappel de Search Manager?
-
02-10-2019 - |
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?
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!