从ViewPager Fragment刷新活动

时间:2017-08-10 10:16:50

标签: java android android-fragments android-viewpager

我有一个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);
    }

我只是以相反的方式找到了这样做的方法,从活动中重新加载一个片段,但我想以另一种方式做到这一点。

1 个答案:

答案 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);
   }
}