Obecnie mam Aktywność, która kiedy zostanie wyświetlona, Powiadomienie zostanie również wyświetlone na pasku powiadomień.
Dzieje się tak, gdy użytkownik naciska do domu, a działanie zostaje zepchnięte w tło, może wrócić do działania za pośrednictwem powiadomienia.
Problem pojawia się, gdy użytkownik naciśnie przycisk Wstecz, moja Aktywność zostanie zniszczona, ale Powiadomienie pozostanie, ponieważ chcę, aby użytkownik mógł się cofnąć, ale nadal będzie mógł uzyskać dostęp do Aktywności za pośrednictwem Powiadomienia. Ale gdy UŻYTKOWNIK spróbuje tego, otrzymuję Null Pointers jako próbę rozpoczęcia nowej działalności zamiast przywracania starej.
Zasadniczo chcę, aby przycisk Wstecz działał dokładnie tak samo jak przycisk Początek, a oto, jak próbowałem do tej pory:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
return;
}
Jednak powyższy kod nadal pozwala na zniszczenie mojej aktywności. Jak mogę zapobiec zniszczeniu mojej aktywności po naciśnięciu przycisku Wstecz?
źródło
, the
<'powinno stać się a>
.Odpowiedzi:
Usuń kluczowy program nasłuchujący lub wróć,
true
gdy maszKEY_BACK
.Potrzebujesz tylko następujących rzeczy, aby złapać klawisz powrotu (pamiętaj, aby nie wywoływać super- in
onBackPressed()
).Ponadto, jeśli planujesz uruchomić usługę w tle, koniecznie spójrz
startForeground()
i upewnij się, że masz ciągłe powiadomienie, w przeciwnym razie Android zabije twoją usługę, jeśli będzie potrzebowała zwolnić pamięć.źródło
Łatwiej było go wdrożyć tylko za pomocą jednego wiersza kodu:
źródło
Myślę, że nie chcesz zastąpić przycisku Wstecz (to po prostu nie wydaje się dobrym pomysłem - system operacyjny Android definiuje takie zachowanie, po co je zmieniać?), Ale użyć cyklu życia aktywności i zachować ustawienia / dane w Zdarzenie onSaveInstanceState (pakiet) .
Następnie użyj onCreate (pakiet), aby uzyskać wszystko z tego utrwalonego pakietu i odtworzyć swój stan.
Rozważ powyższy kod psuedo, aby skierować Cię we właściwym kierunku. Czytanie cyklu życia aktywności powinno pomóc Ci określić najlepszy sposób na osiągnięcie tego, czego szukasz.
źródło
po prostu zrób to ...
komentowanie //super.onBackPressed (); da rade
źródło
Spróbuj tego:
źródło
Na wypadek, gdybyś chciał poradzić sobie z zachowaniem przycisku Wstecz (u dołu telefonu) i przycisku Początek (ten po lewej stronie paska akcji), ta niestandardowa aktywność, której używam w moim projekcie, może ci pomóc .
Przykład zastosowania w twojej działalności:
źródło
źródło
W Kotlinie:
Aby uzyskać więcej informacji, można sprawdzić to .
Istnieje również konkretne pytanie dotyczące zastąpienia przycisku Wstecz w Kotlinie.
źródło