我有一个BaseActivity
,其中ViewPager
有一些Fragments
。在其中一个Fragments
中,我有2个按钮可以更改应用程序的语言。
我想要完成的是,点击按钮,将BaseActivity
刷新为所选语言,但仍然在设置(片段名称)上设置ViewPager。现在它正在重新加载整个应用程序,并从我设置它开始的片段开始。
更改语言和刷新活动的代码
public void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
SharedPreferences ensharedPreferences = getActivity().getSharedPreferences("selectedLanguage", MODE_PRIVATE);
SharedPreferences.Editor eneditor = ensharedPreferences.edit();
eneditor.putString("language", lang);
eneditor.apply();
SharedPreferences pref = getActivity().getSharedPreferences(lang,MODE_PRIVATE);
Intent refresh = new Intent(getContext(), BaseActivity.class);
getActivity().overridePendingTransition(0,0);
startActivity(refresh);
getActivity().overridePendingTransition(0,0);
}
我只是以相反的方式找到了这样做的方法,从活动中重新加载一个片段,但我想以另一种方式做到这一点。
答案 0 :(得分:2)
您可以使用getCurrentItem()将ViewPager的选定位置传递给Activity,并将其作为额外内容传递给新Intent,并在通过getIntent()重新启动Activity时重新选择项目编号,然后移至之前选择的Fragment by使用setCurrentItem(int position)
// Restarting the Activity passing the position of the currently selected Fragment
Intent intent = new Intent(getContext(), BaseActivity.class);
intent.putExtra(EXTRA_POSITION, viewPager.getCurrentItem());
startActivity(intent);
@Override
protected void onCreate(Bundle savedInstanceState) {
...
Intent intent = getIntent();
if(intent != null) {
int position = intent.getIntExtra(EXTRA_POSITION, 0);
viewPager.setCurrentItem(position);
}
}