在spinner onItemSelected中重新启动活动

时间:2017-06-18 07:45:48

标签: android android-spinner

我现在在应用程序的第一个活动中有一个微调器,其中包含可用语言列表,我需要重新启动活动以更改应用程序的语言(我正在使用上下文包装器)。但我的代码保持"重新创建"活动,它永远不会停止:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
            Session.setLang(position);

            String name = lang_name[position];
            SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
            editor.putString("locale", name);
            editor.commit();

            recreate();
        }

无论如何我可以从微调器项目选择中重新启动活动吗?

2 个答案:

答案 0 :(得分:1)

  

我的代码不断“重新创建”活动,它永远不会停止:

设置onItemSelection侦听器时要小心。仅在初始化微调器后设置监听器,否则当您设置默认项时,它将执行onItemSelected并将根据您的代码继续重新创建活动。

答案 1 :(得分:0)

大家,如果你感兴趣的话,最后我通过在事件监听器中添加first_trigger标志来解决onItemSelected()调用的第一个触发器,并替换了recreate(),如下所示,现在一切正常:

lang_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
        boolean first_trigger = true;

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
            LoginSession.setLang(position);

            if(first_trigger){
                first_trigger = false;
            }else{
                String name = lang_name[position];
                SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
                editor.putString("locale", lang_name);
                editor.commit();

                Intent intent = new Intent(getBaseContext(), Login.class);
                startActivity(intent);
                overridePendingTransition(0,0);
                finish();
                overridePendingTransition(0,0);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent){
            LoginSession.setLang(0);
        }
    });