2012-08-04 18 views
6

Wiem, że to pytanie było zadawane wiele razy wcześniej, ale żadne z rozwiązań nie działa, a moja sytuacja jest trochę inna.Przejdź do ekranu głównego zamiast poprzedniej aktywności

Mam numer Activity, który można wywołać z wielu różnych działań. Ale chcę, gdy użytkownik naciśnie przycisk Wstecz, zamiast poprzedniego działania, aplikacja powinna przejść do ekranu głównego.

Jeden ze sposobów użycia StartActivityFromResult(), ale będę musiał go użyć w każdym działaniu telefonicznym.

+0

możesz zachować przycisk po naciśnięciu przycisku automatycznie przechodzi na stronę hme ... Intent i = new Intent (AccountActivity.this, ContactsActivity.class); startActivity (i); – shassss

+1

"Ale chcę, gdy użytkownik naciśnie przycisk Wstecz, zamiast poprzedniego działania, aplikacja powinna przejść do ekranu głównego" - ponieważ jest raczej mało prawdopodobne, że * użytkownik * będzie tego chciał, dlaczego uważasz, że jest to uzasadnione zachowanie? – CommonsWare

+0

Aktywność, o której wspomniałem, to ekran odtwarzacza muzyki. Chcę, gdy użytkownik wybierze utwór z listy odtwarzania, a następnie aplikacja przejdzie do PlayerActivty. Ale gdy przycisk powrotu jest naciśnięty przez odtwarzacz, przepływ zostanie przeniesiony do ekranu głównego lub do innej aplikacji, którą użytkownik otworzył wcześniej.Mam nadzieję, że wyjaśniłem to pytanie. – reiley

Odpowiedz

23

można zastąpić metodę onBackPressed w następujący sposób. Powinno działać.

public void onBackPressed() { 
    Intent startMain = new Intent(Intent.ACTION_MAIN); 
     startMain.addCategory(Intent.CATEGORY_HOME); 
     startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(startMain); 

} 
+0

Dzięki ... to działało .. ale co jeśli na przykład? Używałem aplikacji wiadomości przed aplikacją i loguję się naciskając klawisz domowy, a następnie otworzyłem moją aplikację. Teraz jeśli naciśniesz klawisz powrotu, jak mogę powrócić do poprzednio otwartej aplikacji (wiadomości w tym np.)? – reiley

+0

Jeśli znasz nazwę działania i pakiet tej aplikacji pocztowej, możesz wywołać tę aktywność z metody onBackpressed. – android

+0

Widziałem to w innych miejscach, że nie jest to zalecane. – Enigma

0

Po prostu wyślij intencję bezpośrednio do domu. Można tego dokonać, ustawiając akcję i kategorię tego zamiaru.

Sprawdź dokumentację Intent w celu uzyskania szczegółowych informacji.

-3
 Button btn = (Button) findViewById(R.id.button2); 
     btn.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) 
       { 
      Intent i = new Intent(AccountActivity.this, HomeActivity.class); 
        startActivity(i); 
       } 
      }); 
+0

To jest nieprawidłowe. Brak klasy HomeActivity, do której możesz zadzwonić. Zapoznaj się z moim postem lub postem @android. – JoxTraex

2

Można również po prostu wywołać metodę finish() dla tego działania.

+0

Nie polecam stosowania tego podejścia, ponieważ 1. Prawdopodobnie system operacyjny wywoła wywołanie zwrotne 'onDestroy' działania, które uszkodzi kolejność logiczną stosu. 2. Jeśli twoja aktywność wywołana przez inną aktywność przy użyciu metody 'startActivityForResult', wywoła wywołanie callback' onActivityResult'. – Eido95

1

I jeśli dodasz to pytanie, jeśli nie chcesz przywrócić swojej aktywności w miejscu, w którym przycisnąłeś przycisk, to pod kodem jest tylko finish().

public void onBackPressed() { 
    Intent mainActivity = new Intent(Intent.ACTION_MAIN); 
    mainActivity.addCategory(Intent.CATEGORY_HOME); 
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(mainActivity); 
    finish(); 
} 
0

To tylko proste, jeśli masz aktywny A i zrobić 3 fragmenty, takie jak B, C i Home_Fragment. Teraz, jeśli jesteś w części B lub C i naciśnij przycisk Wstecz, który chcesz przenieść Home_Fragment za każdym razem.
Potem trzeba tylko zastąpić metodę aktywności A onBackPressed() a także kiedy przeskoczyć do dowolnego fragmentu, a następnie podać konkretną TAG lub nazwę, można uznać, że fragment aktywności A.

jestem dając przykładem, który można łatwo zrozumieć:

Przejście od A do aktywności Fragment C

if (savedInstanceState == null) { 
    getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new C_fragment(),"xyz").commit(); 
} 

lub jeśli jesteś w ruchu z fragmentu B z fragmentem C, a na tylnej prasy, chcesz przyjść na Fragment D, zrobić jak poniżej:

btn.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 
     getActivity().getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new C_frament(), "xyz").commit(); 
     ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Fragment C"); 
    } 
}); 

Teraz trzeba tylko przesłonić onBackPressed() metoda główna działalność w następujący sposób:

@Override 
public void onBackPressed() { 
    FragmentManager fragmentManager =getSupportFragmentManager(); 

    if (((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")) != null 
      && ((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")).isVisible()) { 

     Fragment fragment = new Home_Fragment(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, fragment) 
       .commit(); 
     getSupportActionBar().setTitle("Home fragment "); 

    } else { 
     super.onBackPressed(); 
    } 
} 
Powiązane problemy