2013-10-12 31 views
0

在我的壁紙偏好活動中,在複選框首選項和列表首選項中,有一個旨在爲背景啓動圖像選取器的意圖。當選擇圖像時,onSharedPreference不會觸發,我發現只有圖像選擇器意圖不會觸發共享首選項更改。那麼我該如何手動觸發它呢?手動調用onSharedPreferenceChange()

@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

我想通了一個人。 onSharedPreferenceChange僅在輸入數據與前一個不同時觸發。有問題的代碼會在首選項中輸入保存圖像的路徑時觸發onSharedPreferenceChange。但由於保存圖像的路徑總是相同,所以它不再發射。

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

上面的代碼在每次圖像被裁剪時輸入不同的布爾值。