Wie von Search Manager behandeln Rückruf?
-
02-10-2019 - |
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?
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!