【问题标题】:Android shared preference when activity recreated重新创建活动时的 Android 共享首选项
【发布时间】:2015-01-19 12:57:29
【问题描述】:

嗨,在我的应用中,我使用了两个主题。 当主题发生变化时,将重新创建活动。此时我无法恢复编辑文本值。

      @Override
        protected void onResume() {


            SharedPreferences mSharedPreferences = getSharedPreferences(
                    Constants.PREFERENCE_FILENAME, Activity.MODE_PRIVATE);

            edt_kilo.setText(mSharedPreferences.getString(Constants.KILO_VAL,""));
            edt_pound.setText(mSharedPreferences.getString(Constants.POUND_VAL,""));

            if ((edt_centimeter.getText().toString().length() > 0)
                    || (edt_feet.getText().toString().length() > 0)
                    || (edt_inches.getText().toString().length() > 0)) {
                imagelayout.setVisibility(View.VISIBLE);

                super.onResume();
            }
        }

        @Override
        protected void onPause() {
            super.onPause();

            SharedPreferences.Editor edit = mSharedPref.edit();
            edit.putString(Constants.KILO_VAL, edt_kilo.getText().toString());
edit.putString(Constants.POUND_VAL,edt_pound.getText().toString());

            edit.commit();

        }

    @Override
        public void onBackPressed() {

                this.finish();
        }

上述代码的问题是即使在按下设备的“返回”按钮完成活动后,值仍然保留,这是我不想要的。

当我“清除”edittext 中的值以及按下设备的“返回”按钮时,当我再次访问时,相同的值仍然存在。

如何处理这种情况

【问题讨论】:

    标签: android android-edittext sharedpreferences


    【解决方案1】:

    试试这样:

    public class TestActivity extends Activity{
    
        private String etFirstValue="";
        private String etSecondValue="";
        private EditText etTwo,etOne;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //initaialize views here
        }
    
        /* (non-Javadoc)
         * @see android.app.Activity#onRestoreInstanceState(android.os.Bundle)
         */
        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            etFirstValue = savedInstanceState.getString("firstEditTextKey");
            etSecondValue = savedInstanceState.getString("secondEditTextKey");
        }
    
        /* (non-Javadoc)
         * @see android.app.Activity#onSaveInstanceState(android.os.Bundle)
         */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            outState.putString("firstEditTextKey", "value");
            outState.putString("secondEditTextKey", "value");
            super.onSaveInstanceState(outState);
        }
    
    
        @Override
        protected void onResume() {
            super.onResume();
            //set the values to edit text
            etOne.setText(etFirstValue);
            etTwo.setText(etFirstValue);
    
        }
    
    }
    

    简要说明您可以通过此链接:here

    【讨论】:

    • 我使用了你的方法,但是当我更改主题时,值不会出现在相应的编辑文本中
    • 你得到了什么?
    【解决方案2】:

    这是因为您正在设置共享首选项中的值,并且当应用程序的活动关闭和打开时共享首选项不会被清除。

    如果可以,您可以清除首选项,也可以将空值设置为 onStop() 中的编辑文本。

    【讨论】:

    • 我尝试在 onStop() 方法中设置空值和清除共享首选项,但是当重新创建 activty 时,vales 应该保留..但它不会发生
    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多