したがって、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;
}
}