手动调用onSharedPreferenceChange()

时间:2013-10-12 05:57:37

标签: android sharedpreferences

在我的壁纸首选项活动中,在复选框首选项和列表首选项中,有一个意图是为背景启动图像选择器。当选择图像时,onSharedPreference没有触发,我发现只有图像选择器意图不会触发共享偏好更改。那我怎么能手动触发呢?

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode != RESULT_OK) {

        return;
    }

    Bitmap bitmap;

    switch (requestCode) {

        case REQUEST_CODE_GALLERY:

            try {

                InputStream inputStream = getContentResolver().openInputStream(data.getData());
                FileOutputStream fileOutputStream = new FileOutputStream(mFileTemp);
                copyStream(inputStream, fileOutputStream);
                fileOutputStream.close();
                inputStream.close();

                startCropImage();

            } catch (Exception e) {

                Log.e("xxx", "Error while creating temp file", e);
            }

            break;

        case REQUEST_CODE_CROP_IMAGE:

            String path = data.getStringExtra(CropImage.IMAGE_PATH);
            if (path == null) {

                return;
            }

            bitmap = BitmapFactory.decodeFile(mFileTemp.getPath());
            imagePreference.setSummary(path);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("imageDb", path);
            editor.commit();
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

1 个答案:

答案 0 :(得分:0)

我自己想出来了。仅当输入数据与前一个输入数据不同时,才会触发onSharedPreferenceChange。有问题的代码在首次输入首选项中保存图像的路径时会触发onSharedPreferenceChange。但它不再是第二次触发,因为保存图像的路径始终是相同的。

Boolean picker = prefs.getBoolean("picker", false);
editor.putBoolean("picker", !picker);

以上代码每次裁剪图像时都会输入不同的布尔值。