Chcę dostosować przycisk Wstecz aktywności na pasku akcji, a nie na twardym przycisku Wstecz. ZastąpiłemonBackPressed()
Metoda . Działa z przyciskiem Wstecz mojego emulatora, ale nie z przyciskiem Wstecz na pasku akcji.
Chcę, żeby stało się to z paskiem akcji. Jak mogę to zrobić?
Oto mój kod:
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show();
return;
}
Użyłem tego toastu, niezależnie od tego, czy naciśnięcie przycisku wstecz działa, czy nie, ale rzeczywiste zmiany implementacji, takie jak powrót do poprzedniej czynności. Ale to nie działa z przyciskiem znajdującym się na górze paska akcji (poza tytułem działania).
Proszę, każdy mógłby określić mi problem.
return true;
nareturn super.onOptionsItemSelected(item)
. Następnie możesz sprawić, że coś się stanie, gdy użytkownik kliknie przycisk Wstecz na pasku akcji, ale nadal zachowasz tę samą funkcjonalność przycisku.Jeśli chcesz, aby przycisk Wstecz na pasku ActionBar zachowywał się tak samo jak sprzętowy przycisk Wstecz:
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; } return false; }
źródło
android.R.id.home
nie odpalasetHasOptionsMenu(true)
metodę onCreate fragmentuDwie rzeczy, o których należy pamiętać, że użytkownik może nacisnąć przycisk Wstecz lub nacisnąć przycisk strony głównej paska akcji.
Jeśli więc chcesz przekierować go do tego samego miejsca docelowego, możesz to zrobić.
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return false; } @Override public void onBackPressed() { super.onBackPressed(); Intent intent = new Intent(CurrentActivity.this, NextActivity.class); startActivity(intent); finish(); }
Spowoduje to przejście użytkownika do intencji naciśnięcia klawisza lub przycisku paska akcji.
źródło
android.R.id.home
nie odpala@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); break; } return true; }
źródło
Przepraszam, że moja odpowiedź jest spóźniona, ale dla każdego, kto przyszedł na tę stronę z tym samym pytaniem, wypróbowałem powyższe:
@Override public boolean onOptionsItemSelected(MenuItem item) { ... if (item.getItemId() == android.R.id.home) { .... } .... }
ale nie udało się złapać naciśnięcia przycisku „Wstecz”.
W końcu znalazłem metodę, która działała dla mnie na https://stackoverflow.com/a/37185334/3697478, która ma zastąpić „onSupportNavigateUp ()”, gdy używam paska akcji z biblioteki obsługi „AppCompatActivity”. (Istnieje odpowiednik „onNavigateUp ()” dla nowszej biblioteki paska akcji / paska narzędzi).
@Override public boolean onSupportNavigateUp(){ finish(); return true; }
i usunąłem sekcję „android: parentActivityName =”. MainActivity ”z pliku manifestu.
źródło
Osiągnąłem to, wykonując po prostu dwa kroki,
Krok 1: Przejdź do AndroidManifest.xml i dodaj parametr w tagu - android: parentActivityName = ". Home.HomeActivity"
przykład:
<activity android:name=".home.ActivityDetail" android:parentActivityName=".home.HomeActivity" android:screenOrientation="portrait" />
Krok 2: w ActivityDetail dodaj akcję dla poprzedniej strony / aktywności
przykład:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return super.onOptionsItemSelected(item); }
źródło
Jeśli chcesz powrócić do poprzedniego wystąpienia działania , naciskając przycisk główny ActionBar, bez jego ponownego tworzenia, możesz zastąpić metodę getParentActivityIntent, aby użyć metody z tylnego stosu:
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public Intent getParentActivityIntent() { return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); }
EDYCJA:
Również możesz osiągnąć ten sam rezultat,
ustawiając launchMode swojej aktywności nadrzędnej na singleTop. Ustaw
więc
android:launchMode="singleTop"
aktywność rodziców w swoim manifeście.Możesz też użyć flagi FLAG_ACTIVITY_CLEAR_TOP z intencją UP.
odniesienie: Zapewnianie nawigacji
źródło
(1) Dodaj aktywność rodzica dla aktywności dziecka (AndroidManifest.xml)
<activity android:name=".ParentActivity" />
(2) przesłania metodę onSupportNavigateUp w działaniu podrzędnym
@Override public boolean onSupportNavigateUp() { onBackPressed(); return false; }
źródło
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == android.R.id.home) { onBackPressed(); return true; } //noinspection SimplifiableIfStatement if (id == R.id.signIn) { return true; } return super.onOptionsItemSelected(item); } /////////////////// @Override public void onBackPressed() { super.onBackPressed(); finish(); }
źródło
Istnieje kilka sposobów konfiguracji przycisku Wstecz na pasku:
1)
.setDisplayHomeAsUpEnabled(true);
zrobi to, a następnie możesz po prostu zastąpićandroid.R.id.home
2) dodanie
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />
w Android Manifest, ale w tym przypadku nie można nadpisaćandroid.R.id.home
w OnOptionsMenuSelected... dla tych, którzy zastanawiają się, dlaczego to nie działa ...
źródło