2012-08-04 17 views
6

Ich weiß, dass diese Frage schon oft gestellt wurde, aber die Lösung funktioniert nicht und meine Situation ist ein bisschen anders.Gehe zum Startbildschirm statt vorheriger Aktivität

Ich habe eine Activity, die von vielen verschiedenen Aktivitäten aufgerufen werden kann. Aber ich möchte, wenn der Benutzer die Taste zurückdrückt, anstelle der vorherigen Aktivität, sollte die App auf den Startbildschirm gehen.

Eine Möglichkeit, StartActivityFromResult() zu verwenden, aber dann muss ich es in jeder aufrufenden Aktivität verwenden.

+0

u-Taste halten kann, wenn die Taste drückt, schaltet es automatisch auf hme Seite ... Intent i = new Intent (AccountActivity.this, ContactsActivity.class); startActivity (i); – shassss

+1

"Aber ich möchte, wenn der Benutzer die Taste zurückdrückt, anstelle der vorherigen Aktivität, sollte App auf Home-Bildschirm gehen" - da es eher unwahrscheinlich ist, dass der * Benutzer * dies wollen wird, warum denkst du, das ist vertretbares Verhalten? – CommonsWare

+0

Die Aktivität, die ich erwähne, ist der Player-Bildschirm eines Musik-Players. Ich möchte, wenn der Benutzer einen Song aus der Playlist auswählt, dann wird die App zu PlayerActivty gehen. Wenn die Zurück-Taste vom Player gedrückt wird, wird entweder zum Home-Bildschirm oder zu einer anderen App weitergeleitet, die der Benutzer zuvor geöffnet hat.Ich hoffe, ich habe die Frage erläutert. – reiley

Antwort

23

können Sie die onBackPressed-Methode wie folgt überschreiben. Es sollte funktionieren.

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

Danke..das funktioniert .. aber was wäre, wenn z.B. Ich benutzte Nachrichtenanwendung vor meiner Anwendung und ich log gedrückten Hauptschlüssel und öffnete dann meine App. Nun, wenn ich die Taste zurückdrücke, wie kann ich zur vorher geöffneten App zurückkehren (Messaging in diesem zB)? – reiley

+0

Wenn Sie den Aktivitätsnamen und das Paket dieser E-Mail-Anwendung kennen, können Sie diese Aktivität von Ihrer onBackpressed-Methode aus aufrufen. – android

+0

Ich habe das an anderen Stellen gesehen, dass dies nicht empfohlen wird. – Enigma

0

Senden Sie einfach eine Absicht direkt nach Hause. Dies kann durch Festlegen der Aktion und Kategorie dieser Absicht erfolgen.

Weitere Informationen finden Sie in der Dokumentation zu Intent.

-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

Das ist falsch. Es gibt keine HomeActivity-Klasse, die Sie aufrufen können. Siehe entweder meine Post oder @android Post. – JoxTraex

2

könnten Sie auch die finish() Methode auf die Aktivität rufen Sie einfach an.

+0

Ich werde diesen Ansatz nicht empfehlen, weil 1. Vermutlich ruft das Betriebssystem 'onDestroy' Callback der Aktivität auf, die die logische Reihenfolge Ihres Backstacks beschädigt. 2. Wenn Ihre Aktivität von einer anderen Aktivität mit der Methode 'startActivityForResult' aufgerufen wird, ruft sie die aufrufende Aktivität 'onActivityResult' Callback auf. – Eido95

1

Und Hinzufügen zu dieser Frage, wenn Sie nicht möchten, dass Ihre Aktivität zurück, wo Sie zurück gedrückt, dann nur eine finish() unter dem Code.

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

Es ist nur einfach, wenn Sie eine Aktion A haben, und Sie machen 3 Fragmente wie B, C und Home_Fragment. Jetzt, wenn Sie in Fragment B oder C sind und drücken Sie die Taste zurück, die Sie weitergehen möchten Home_Fragment jedes Mal.
Dann müssen Sie nur noch die onBackPressed() Methode in Aktivität A außer Kraft setzen und auch wenn Sie zu jedem Fragment zu springen, geben dann einen bestimmten TAG oder Namen, werden Sie dieses Fragment in Aktivität A. erkennen

ich geben werde die Beispiel, dass man leicht verstehen:

Wechsel von Aktivität A bis Fragment C

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

oder wenn Sie von Fragment B bewegen C fragmentieren, und auf der Rückseite drücken, möchten Sie auf Fragment D kommen, tun wie unten:

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"); 
    } 
}); 

Jetzt müssen Sie nur die onBackPressed() überschreiben Verfahren in Haupttätigkeit wie folgt:

@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(); 
    } 
} 
Verwandte Themen