I have an activity(A) and I need to set some text after activity becomes visible to user ,first time I navigate to activity everything is OK,but when I navigate from (A) to activity (B) and press back button ,it returns to (A) button doesn't call onstart of (A).what is the problem?
Back button is navigation to previous activity in activity stack, which is already created and thus its onResume method will be called. So you can do what you want inside onResume().
If it is must for your activity to create new instance do as follows:
If you are on activity A and going B, call A.finish() so it discards A from activity stack, and on B override backPressed and create a new instance of A.
#Override
public void onBackPressed() {
Intent i= new Intent(this, A.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.finish();
startActivity(i);
}
Related
I have two Activity A and B.
Launched Activity A.
Started Activity A ---> Activity B
On Backey pressed Activity B is destroying and navigating to A.
I do not want to destroy the Activity B, maintain in stack to reuse the same activity when i navigate from A to B again.
Actual:
Activity B is loading URL in webview oncreate which creating every time and reloads the URL.
Expected:
It should start Activity A to Activity B by not creating and should not reload again.
Try this solution
#Override
public void onBackPressed() {
this.startActivity(new Intent(YourActivity.this,ActivityA.class));
}
Override the onBackPressed() in ActivityB and then launch the activity A
#Override
public void onBackPressed() {
moveTaskToBack(true);
}
It'll move your activity to Stack and it'll remain there when you'll return.
For more details look here
From Activity B, below code will not destroy the Activity B and navigate to A
#Override
public void onBackPressed() {
this.startActivity(new Intent(ActivityB.this,ActivityA.class));
}
Navigating from Activity A to B, set below flag to intent which will not recreate the activity.
setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
Thanks.
I am working on an app on which you can share images from your local phone's gallery app. Whenever a photo is shared through the gallery app, an Activity A opens up in my app.
The photo sharing follows some steps in which it goes from Activity A to Activity B and the final step in B opens the Main Activity.
What I want, pressing back from B should open A. Pressing the final button in B should clear both A and B from backstack, so that if you press back on Main Activity, the app should close.
What I did :
Initially, I was opening Main Activity with this flag intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
But, this started a new task and so even when I used to close my app and go to the phone's gallery app, it would show A instead of the photo on that app, when you pressed back, then you could see the actual image in that gallery app.
I had specified android:noHistory="true" for A and B and started the intent to Main Activity without the new task flag. This solved the new task problem in the sense that when I close my app and switched back to the gallery app, it showed the actual image not my activity A. But the issue here is, I can't go back to A from B, also if the app is minimised, then also the activity is gone.
Create a singleton class :
Stack<Activity> stack;
public void add(Activity activity){
stack.add(activity).
}
public void remove(){
Activity activity = stack.lastElement();
if(activity != null) {
stack.remove(activity).
activity.finish();
}
}
public void removeAll() {
for (Activity activity : stack) {
if (activity != null)
activity.finish();
}
stack.clear();
}
call add() in your activities' onCreate()
call remove will finish current activity
call removeAll will finish all activities added into the stack
Intent l = new Intent(getApplicationContext(), MainActivity.class);
l.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
l.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
l.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
finish();
startActivity(l);
use this on finish button in avtivity B.
I have created two activity i.e Activity A & Activity B ,if i clicked Next Button i.e in Activity A going to Activity B properly But when i click on back button i want to go from Activity B to Activity A and page swipe from left side to right side and on click next page swipe right to left,
here is my code
public void onBackPressed() {
Intent intent = new Intent(ActivityB.this, Activity.class);
startActivity(intent);
finish();
Just Remove finish() from Activity.
Because when you go to second activity and finish first activity, there is no any activity and stack.
So If you click back button from second activity, application will be finish if there is no Activity in stack.
You should use this Approach.
Ex.
In Activity.java
Intent first = new Intent(Activity.this,ActivityB.class);
startAcivity(first);
// Don't use finish() here.
In ActivityB.Java
Just click on built in back button.
or If you want to use your own back button.
Use finish(); in button click event.
You can use only onBackPressed();
public void onBackPressed() {
super.onBackPressed();
}
Android Overriding onBackPressed()
How to go previous Activity by using back button
No need to put an intent and start a new activity that would take you to previous activity.
Just call 'finish()'
It would go back to previous activity as Android activities are stored in the activity stack
If you have other activities that are present in between the activites say if android stack is filled with Activity A>Activity C>Activity B,If you want to go to Activity A on finish of Activityy B then you have to set an intent flag like FLAG_ACTIVITY_REORDER_TO_FRONT or FLAG_ACTIVITY_PREVIOUS_IS_TOP
Just use finish() no need for intent as A is already in stack and when you finish B, A will come to surface
public void onBackPressed() {
finish();
}
Read this to learn more about android activity stack.
public void onBackPressed() {
// TODO Auto-generated method stub
finish();
super.onBackPressed();
}
I have four activities
ListActivity
Itemdetail_Activity
record1_Act
record2_act.
I can go from ListActivity -> record1_Act and from ListActivity <-record1_Act properly but when I want to go from Itemdetail_Activity -> record2_act and return back from Itemdetail_Activity <- record2_act it always goes record2_act to ListActivity.
I even used i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); but it does not work. How to solve this issues?
Here is my code
Intent i = new Intent(record2_act.this, Itemdetail_Activity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
Intent i = new Intent(record1_Act.this, ListActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
finish();
After starting activity remove finish() call because it will clear that activity from stack and i see you have used finish in your code. also you do not need to set these flags.
In activity 4, implement onBackPressed() as,
#Override
public void onBackPressed()
{
Intent i = new Intent(4.this, 3.class);
startActivity(i);
}
call this method if you have any back button. And if you want to link the backpress for every activity you need to implement onBackPressed() method in every activity.
you can call onBackPressed() if previous activity not finished also you can use :
this.finish();
// Or
Activity currentActivity = this;
currentActivity.finish();
and if previous you finished activity you have to track user in activities and make list of activities, then move to :
activitiList.get(activityList.size() - 2);
// activityList.size() - 1 is last activity and activityList.size() - 2 is previous activity
Do check if ItemDetailsActivity is NOT calling finish()
Here is the question:
Let's say the activity stack consist of A->B->C.
If user followed the order eg: Start A -> B -> C, pressing back button will cause C->B->A.
However, if user entered directly into activity C (eg: via notification), pressing back button will cause the app to close, instead of going into B->A.
How do I insert the into the activity stack to become A->B->C, so that when user pressed back at C, it will always back to B.
Thanks
just overide the onBackPressed() method and startactivity B in activityc and startactivity a in activity b.
in activty c have these code::
public void onBackPressed(){
startActivity(new Intent(this,ActivityB.class));
finish();
}
and in activity b have these code::
public void onBackPressed(){
startActivity(new Intent(this,ActivityA.class));
finish();
}
and in activity a have these code::
public void onBackPressed(){
finish();
}