2016-08-01 23 views
0

Ich versuche einfach zurück zu klicken und zu meiner vorherigen Aktivität zu navigieren. Mein Flow ist dies: Ich gehe zu news_feed activity ->Comments activity ->User Profile activity ->click back (Zum Comments activity) ->click back (Dies tut nichts aus irgendeinem Grund) -> Klicken Sie zurück (zu news_feed activity Zurück). Ich bin mir nicht sicher, warum ich zweimal auf back klicken muss, wenn ich versuche, von Comments activity zurück zu news_feed Aktivität zu gehen. Wenn ich gehe von news_feed Aktivität ->Comments -> drücken Sie zurück (Go to news_feed activity) Dies funktioniert perfekt. Hier ist mein Code:Muss zweimal auf die Zurück-Taste drücken, um zur vorherigen Aktivität zu gelangen?

news_feed.java:

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

Comments.java:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    this.finish(); 
} 

UserProfile.java:

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    Intent intent = new Intent(UserProfile.this, Comments.class); 
    Bundle bundle = new Bundle(); 
    bundle.putString("postId", postId); 
    bundle.putString("posterUserId", posterUserId); 
    bundle.putString("posterName", posterName); 
    bundle.putString("postStatus", postStatus); 
    bundle.putString("postTimeStamp", postTimeStamp); 
    bundle.putString("postTitle", postTitle); 
    intent.putExtras(bundle); 
    startActivity(intent); 
    finish(); 
} 

Ich glaube nicht an diese Navigation Aktivitäten würden alles ändern, aber ich kann die Absichten, die ich verwendet habe, um auch zu diesen Aktivitäten zu navigieren, wenn nötig mit einbeziehen. Ansonsten habe ich nur den onBackPressed Code, den ich für diese Aktivitäten hatte. Irgendwelche Ideen, warum dies ein Problem verursachen könnte? Jede Hilfe wäre willkommen. Vielen Dank.

+0

Rufen Sie nicht 'finish()' in 'onBackPressed()' – Shaishav

+0

Warum Sie in Kommentare Aktivität verwenden onBackPressd, wenn Sie es gerade beenden müssen. Ich werde fertig, wenn Sie zurück drücken, ohne onBackPressCode zu schreiben. –

Antwort

0

In Ihrer Klasse UserProfile, in der Methode onBackPressed(), starten Sie die Klasse Comments erneut. Warum musst du das tun? Was passiert, ist, dass Sie eine neue Comments-Aktivität onBackPressed() der USerProfile-Klasse starten. Es gibt also zwei Instanzen von Comments-Aktivität. Du fühlst dich also zweimal zurück.

Wenn Sie Daten zurück an Comments von UserProfile Klasse übergeben müssen, dann verwenden Sie setResult() Methode.

How to pass data from 2nd activity to 1st activity when pressed back? - android

Sending data back to the Main Activity in android

0

Sie können so etwas wie dies versuchen:

private boolean clicked; 
@Override 
public void onBackPressed() { 
    if (!clicked) { // if it was not clicked before, change the value of clicked to true and do nothing directly return, if clicked again, then it will be finish the activity. 
     clicked=true; 
     return; 
    } 
    super.onBackPressed(); 
} 

Und wenn Sie die Zeit nutzen wollen, dann können Sie wie folgt tun:

private long lastClicked; 
@Override 
public void onBackPressed() { 
    if (System.currentTimeMillis() - lastClicked < 1000) { // within one second 
     super.onBackPressed(); 
    } 
    lastClicked = System.currentTimeMillis(); 
} 
0

ich Ihnen das Ergebnis zurück senden wollen zur vorherige Aktivität durch die Start-Aktivität

startActivityForResult() 

insead von

mit
startActivity() 

und nicht außer Kraft

onBackPressed() 
0
public void onBackPressed() { 


     if (this.lastBackPressTime < System.currentTimeMillis() - 2000) { 



      this.lastBackPressTime = System.currentTimeMillis(); 
     } else { 


      //super.onBackPressed(); for exit 

      //INTENT HERE TO YOUR SECOND ACTIVITY like below 

      Intent intent=new Intent(A.this,B.class); 
       startActivirty(intent); 
     } 

} 

eine Variable global erstellen

private long lastBackPressTime = 0; 

Hoffnung das wird Ihnen helfen, Lassen Sie mich wissen ..

0

Sie brauchen nicht onBackPressed() außer Kraft zu setzen, wenn alle Anruf zu tun, du gehst ist startActivity() und finish() in der aktuellen Aktivität Diese Hilfe sein wird. Der Android-Backstack wird beide für Sie behandeln. Darüber hinaus geben Sie in Ihrer UserProfile.java Daten an vorherige Aktivität weiter. Verwenden Sie dazu startActvityForResult() in der Aktivität Comments (d. H. Die vorherige Aktivität) anstelle von startActivity().

Um mehr über startActvityForResult() Besuch zu lernen: https://developer.android.com/training/basics/intents/result.html