簡體   English   中英

從ViewPager片段刷新活動

[英]Refresh Activity from ViewPager Fragment

我有一個BaseActivity ,其中有一個ViewPager ,其中包含一些Fragments 在這些Fragments之一中,我有2個按鈕可以更改應用程序的語言。 我要完成的事情是,單擊按鈕后,將BaseActivity刷新為所選的語言,但仍在Settings(片段名稱)上設置了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);
    }

我只發現了相反的方法,可以從活動中重新加載片段,但是我想用另一種方法。

您可以使用getCurrentItem()將ViewPager的選定位置傳遞給Activity,並將其作為附加傳遞給新的Intent,並通過getIntent()重新啟動Activity時重新選擇商品編號,並使用setCurrentItem(int位置 )移至先前選擇的Fragment

// 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);
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM