如何更新listpreference摘要(findPreference()不起作用)?

时间:2016-07-15 00:51:03

标签: java android listpreference

因此,SettingsActivity实现了一个SettingsFragment。我正在关注Udacity课程。我的主要问题是,findPreference()不起作用! 这是它在developer.android.com网站上的内容:

findPreference 在API级别1中添加 首选项findPreference(CharSequence键) 此方法在API级别11中已弃用。 此功能与基于片段的现代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;
}

}

1 个答案:

答案 0 :(得分:0)

我想出了如何解决这个问题。将除onCreate之外的所有代码/方法移动到SettingsFragment。将bindPreferenceSummaryToValue(findPreference())也移动到SettingsFragment并从onCreate()中删除实现。