I have an Activity say ActivityMain
from this activity I moved to another activity called ActivitySettings
and in settings activity I'm changing the App locale by clicking on a button, and using recreate I achieved the change I need in current activity but when I press back my `ActivityMain' will resume but locale is not updated.
Can some one tell me how to 'Recreate' backstack activities? what will be the correct approach.
I can't call recreate on refresh as it will be infinite loop
If the user continues to press or gesture Back, then each activity in the stack is popped off to reveal the previous one, until the user returns to the Home screen (or to whichever activity was running when the task began). When all activities are removed from the stack, the task no longer exists.
Task affinity lets you define which task an activity belongs to. By default, an activity has the same task affinity as its root activity. With task affinity, we can now separate activities into different tasks.
exit(); or finish(); it exit full application or all activity.
In each Activity's onCreate()
you can maintain the currentLangCode
. Check this value in onResume()
, if it differs, you can conclude the locale was change and recreate()
You can do it as follows:
public class ActivityA extends AppCompatActivity{
private String currentLangCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
currentLangCode = getResources().getConfiguration().locale.getLanguage();
...
}
@Override
public void onResume(){
...
if(!currentLangCode.equals(getResources().getConfiguration().locale.getLanguage())){
currentLangCode = getResources().getConfiguration().locale.getLanguage();
recreate();
}
}
...
}
If you want to apply it for all the Activities, then simply create BaseActivity as follows:
public class BaseActivity extends AppCompatActivity{
private String currentLangCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
currentLangCode = getResources().getConfiguration().locale.getLanguage();
...
}
@Override
public void onResume(){
...
if(!currentLangCode.equals(getResources().getConfiguration().locale.getLanguage();)){
currentLangCode = getResources().getConfiguration().locale.getLanguage();
recreate();
}
}
...
}
Extend all Activities from BaseActivity
public class ActivityA extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
public void onResume(){
super.onResume();
}
...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With