0

私はMainActivityのOnSharedPreferencesChangedリスナーを初期化しようとすると、コンパイルエラーがメソッドfindPreferenceを解決できません。答えhereによると:MainActivityからfindPreference()を解決できませんか?

findPreference()PreferenceActivityインタフェース

を実装したクラスから呼び出されなければなりませんが、私はこれを行うには、コードがどうなるか理解していません。どのようにしてコンパイラエラーを取り除き、環境設定変更のリスナーを正常に設定できますか?

MainActivity.java

public class MainActivity extends FragmentActivity implements SharedPreferences.OnSharedPreferenceChangeListener { 
     private SharedPreferences.OnSharedPreferenceChangeListener listener; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      ... 
      //Test preference menu 
      listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
       public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
        if (key.equals("pref_wood")) { 
         Preference woodPref = findPreference(key); //COMPILER ERROR HERE 
         MainActivity.getGLSurfaceView().setTexture(""); 
         // Set summary to be the user-description for the selected value 
         woodPref.setSummary(sharedPreferences.getString(key, "")); 
        } 
       } 
      } 
     } 
    } 

答えて

5

findPreferencePreferenceFragmentPreferenceActivity両方の一部である方法である - これらは実際に(活動が廃止され、あなたがする必要がありますお好みの画面を表示するフラグメント/活動していますPreferenceFragmentを使用してください)。

あなたはMainActivityでそれを使用しようとしています。これは、Preferenceオブジェクトが実際にこの画面に存在しないため(通常はPreferenceFragmentの一部である別のアクティビティに存在するため)、機能しません。あなたは、SharedPreferencesを使用し、お好みの画面ではありません活動の好みの好み値へのアクセスを取得するようなものが必要な場合:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); 
int defaultValue = getResources().getBoolean(R.bool.saved_high_score_default); 
boolean wood = sharedPref.getBoolean(pref_wood, defaultValue); 

をあなたはさらに例についてdocumentationをチェックアウトすることができます。

MainActivityが設定を表示する画面であると思われる場合は、名前を変更してその中に環境設定の断片を含めることをお勧めします。

Preferenceはこのアクティビティに含まれていないため、setSummaryの問題に遭遇する可能性があります。これは、実際に設定を変更するアクティビティの一部です。 setSummaryPreferenceの実際のUIを更新するために使用されます。たとえば、リスト設定を使用するときに3つの値のいずれかを選択すると、画面上で選択した値が表示されます。

関連する問題