android中的多语言错误?

android中的多语言错误?,android,android-fragmentactivity,multilingual,Android,Android Fragmentactivity,Multilingual,我正在为我的android项目制作多种语言。 一切都很完美。 除非我关闭应用程序并再次启动它,否则它会返回到以前的语言。 例如:我有两种语言:越南语和英语。 我一开始是越南语。然后我选择英语。但是,当我关闭并再次启动它时,它会返回到越南语 我的代码: public class setting extends Fragment { /** * @param args */ private Spinner spinnerctrl; private Locale myLocale; public

我正在为我的android项目制作多种语言。 一切都很完美。 除非我关闭应用程序并再次启动它,否则它会返回到以前的语言。 例如:我有两种语言:越南语和英语。 我一开始是越南语。然后我选择英语。但是,当我关闭并再次启动它时,它会返回到越南语

我的代码:

public class setting extends Fragment {

/**
 * @param args
 */
private Spinner spinnerctrl;
private Locale myLocale;
public View onCreateView(LayoutInflater inflater,
        @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View settingView =  inflater.inflate(R.layout.setting, container, false);
    spinnerctrl = (Spinner) settingView.findViewById(R.id.spinner1);
    spinnerctrl.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            if (arg2 == 1) {
                Toast.makeText(arg0.getContext(), "You have selected English", Toast.LENGTH_SHORT).show();
                setLocale("en");
            } else if (arg2 == 2) {
                Toast.makeText(arg0.getContext(), "You have selected VietNam", Toast.LENGTH_SHORT).show();
                setLocale("vi");
            }
        }

        private void setLocale(String lang) {
            // TODO Auto-generated method stub
            myLocale = new Locale(lang);
            Resources res = getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
            Intent refresh = new Intent(getActivity(), MainActivity.class);
            startActivity(refresh);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }

    });
    return settingView;
}
公共类设置扩展了片段{
/**
*@param args
*/
私人纺纱机;
私人场所;
创建视图上的公共视图(更平坦的充气机,
@可为空的视图组容器,@Nullable Bundle savedInstanceState){
//TODO自动生成的方法存根
视图设置视图=充气机。充气(R.布局设置,容器,错误);
spinnerctrl=(Spinner)settingView.findViewById(R.id.spinner1);
spinnerctrl.setOnItemSelectedListener(新建OnItemSelectedListener()){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、内部arg2、长arg3){
如果(arg2==1){
Toast.makeText(arg0.getContext(),“您已经选择了英语”,Toast.LENGTH_SHORT.show();
设置语言环境(“en”);
}else if(arg2==2){
Toast.makeText(arg0.getContext(),“您已选择越南”,Toast.LENGTH_SHORT.show();
setLocale(“vi”);
}
}
私有void setLocale(字符串lang){
//TODO自动生成的方法存根
myLocale=新语言环境(lang);
Resources res=getResources();
DisplayMetrics dm=res.getDisplayMetrics();
Configuration=res.getConfiguration();
conf.locale=myLocale;
res.updateConfiguration(conf,dm);
意图刷新=新意图(getActivity(),MainActivity.class);
星触觉(刷新);
}
@凌驾
未选择公共无效(AdapterView父级){
//TODO自动生成的方法存根
}
});
返回设置视图;
}

覆盖区域设置时,只有当前进程运行时,该区域设置才处于活动状态。关闭应用程序后,进程将被终止,区域设置将丢失

如果要保存自定义区域设置,可能必须将其永久存储,例如,如本回答中所述,存储在SharedReferences中:
然后每次启动应用程序时,您都需要检查保存了哪个语言环境。

您没有保存该值,因此当您关闭应用程序时,所有值都会再次设置,应用程序会从设备中选择语言。请尝试使用SharedReferences来实现这一点:

SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE);
要阅读首选项,请执行以下操作:

 //use this when you start your activty 
 String lan = prefs.getString("language", Locale.getDefault().getLanguage() );
setlocale(lan);
编辑和保存首选项的步骤

  //so when the users pick from the list you change the "en" with other language
prefs.edit().putString("language", "en").apply();

getSomeDate()在片段中不起作用。我使用getActivity,但它不起作用too@user3513645请看我的编辑。GetSomeDate()来自我的代码,与此无关。抱歉。你找到了这个问题的答案吗?我仍在尝试,但没有工作