在我的壁纸首选项活动中,在复选框首选项和列表首选项中,有一个意图是为背景启动图像选择器。当选择图像时,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);
}
答案 0 :(得分:0)
我自己想出来了。仅当输入数据与前一个输入数据不同时,才会触发onSharedPreferenceChange。有问题的代码在首次输入首选项中保存图像的路径时会触发onSharedPreferenceChange。但它不再是第二次触发,因为保存图像的路径始终是相同的。
Boolean picker = prefs.getBoolean("picker", false);
editor.putBoolean("picker", !picker);
以上代码每次裁剪图像时都会输入不同的布尔值。