2016-07-15 3 views
1

したがって、SettingsActivityはSettingsFragmentを実装します。私はUdacityのコースに従っています。私の主な問題は、findPreference()がうまくいきません!listpreferenceの要約を更新する方法(findPreference()が機能しません)?

findPreference 追加APIレベル1 選好findPreference(のCharSequenceキー) にこの方法は、この機能は、現代には関係ありませんAPIレベル11 で廃止されました:ここ は、それがdeveloper.android.comサイト上で言っていることですフラグメントベースのPreferenceActivity。

したがって、FRAGMENTのlistPreferenceはどのように持ち込みますか? PreferenceActivityを使用すると、このメソッドは機能しますが、非推奨になります。

package com.example.android.listview1; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; 
import android.os.Bundle; 
import android.os.PersistableBundle; 
import android.preference.*; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.ListPopupWindow; 

import java.util.prefs.PreferenceChangeListener; 



public class SettingsActivity extends AppCompatActivity implements  Preference.OnPreferenceChangeListener { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getFragmentManager().beginTransaction().replace(android.R.id.content,new SettingsFragment()).commit(); 

    **bindPreferenceSummaryToValue(findPreference());** 


} 
private void bindPreferenceSummaryToValue(Preference preference) 
{ 
preference.setOnPreferenceChangeListener(this); 
onPreferenceChange(preference,PreferenceManager.getDefaultSharedPreferences(preference.getContext()).getString(preference.getKey(),"")); 
} 

    @Override 
    public boolean onPreferenceChange(Preference preference, Object  newValue) { 

    String value = newValue.toString(); 

    //if the preference is an instance of ListPreference then you convert the preference object to ListPreference 

    if(preference instanceof ListPreference) { 
     ListPreference listPreference = (ListPreference) preference; 
     //return the index of the value that is selected 
     int prefIndex = listPreference.findIndexOfValue(value); 

     //if there's at least 1 item in the ListPreference, then you set the summary by getting the object at the index 

     if (prefIndex >= 0) { 
      preference.setSummary(listPreference.getEntries()[prefIndex]); 
     } 

     else 
      preference.setSummary(value); 
    } 
    return true; 
} 

}

答えて

0

私はこの問題を解決する方法を考え出しました。 onCreateを除くすべてのコード/メソッドをSettingsFragmentに移動します。 bindPreferenceSummaryToValue(findPreference())をSettingsFragmentにも移動し、onCreate()から実装を削除します。

関連する問題