2017-10-19 13 views
0

私はSharedPreferenceを使用してカメラプレビューのズーム値を保存しています。 SharedPreferenceメニューからズーム値を変更すると、すべて正常に動作します。 このズーム値を設定するためのScaleGestureDetectorも実装しました。SharedPreference UIコントロールが更新されていません

問題は、ジェスチャ検出器を使用しているときに、SharedPreferenceメニューに入るときにコントロールを更新しなかったことです。

SharedPreference(PrefsFile.xml)の実際のXMLを更新しました

-

<string name="pref_zoom_area">0.7</string> 
- UI部品(package_preference.xml)のためのXMLファイルがまだ前の値に設定されているが

<float name="Zoom Area" value="1.0" /> 

私のリスナーは、フラグメント内にある - 私は確認することができ

public class Camera2VideoFragment extends Fragment implements View.OnClickListener, FragmentCompat.OnRequestPermissionsResultCallback, View.OnTouchListener { 

    ... 

    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 

     @Override 
     public boolean onScale(ScaleGestureDetector detector) { 
      mScaleFactor *= detector.getScaleFactor(); 

      // Don't let the object get too small or too large. 
      mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 1.0f)); 

      return true; 
     } 

     @Override 
     public void onScaleEnd(ScaleGestureDetector detector) { 
      mParameters.set_zoom_area(mScaleFactor); 
      SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
      SharedPreferences.Editor editor = settings.edit(); 
      Log.d(TAG, "onScaleEnd() mParameters.get_zoom_area() = " + mParameters.get_zoom_area()); 
      editor.putFloat(getString(R.string.pref_zoom_area), mParameters.get_zoom_area()); 
      editor.apply(); 
     } 
    } 

    ... 
} 

onScaleEnd()が呼び出されています。

私は前にeditor.commit()を持っていましたが、私はeditor.apply()がこの問題を修正していたと思いますが、そうではありませんでした。

+1

ん[この質問](https://stackoverflow.com/questions/5652682/android-preferences-what-is-the-difference)あなたの問題に光を当てますか? – Haem

答えて

0

だから私はこれで今働いている。私は、設定ビューを表示するそれぞれのフラグメントがonResume()で完全に利用可能なときに、プリファレンス値を更新するメソッドを作成しました。

@Override 
public void onResume() { 
    super.onResume(); 
    getPreferenceScreen().getSharedPreferences() 
      .registerOnSharedPreferenceChangeListener(this); 
    updatePreferencesUI(); 
} 

public void updatePreferencesUI() { 
    ListPreference mListPreference; 

    // Some settings may have been changed from outside this fragment. Even though the 
    // SharedPreference itself may be updated, the UI controls for this fragment will need 
    // updating separately, otherwise the two groups would be out of sync. 
    CameraActivity cameraActivity = (CameraActivity) getActivity(); 

    mListPreference = (ListPreference) findPreference("pref_zoom_area"); 
    mListPreference.setValue(String.valueOf(cameraActivity.mParameters.get_zoom_area())); 

} 
関連する問題