OnPreferenceChangeListener

时间:2013-01-20 19:20:33

标签: android sharedpreferences

我在首选项菜单中有一个EditText,可以让我编辑一个URL地址。问题是,当我在首选项菜单中单击“确定”后,主要活动中的首选项值没有立即更新。不知道如何解决这个问题。我尝试了一堆想法,最后决定问。

public class PreferencesActivityTest extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.radio_preferences);
        PreferenceManager.setDefaultValues(PreferencesActivityTest.this,
                R.xml.radio_preferences, false);
        EditTextPreference editPref =(EditTextPreference)findPreference("MyText");
        editPref.setOnPreferenceChangeListener(
                                    new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference,
                    Object newValue) {
                if (newValue.toString().length() > 0) {
                    return true;
                }
                // If now create a message to the user
                Toast.makeText(PreferencesActivityTest.this,
                        "Invalid Input", Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }
}

PS:此代码将newValue更新为我在EditTextPreference中输入的内容,在我再次修改之前不会将新值带到MainActivity ...

更新: 在OnResume()中,我可以看到该值已使用我在PreferenceActivityTest EditTextPreference中修改的值进行更新。我要做的是将此newValue传递给SetDataSource("")

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_radio);
    initializeMediaPlayer();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_edit:
        editURL();
        // make a Dialog or show an Activity
        return true;
    }
}

private void initializeMediaPlayer() {
    PreferenceManager.setDefaultValues(this, R.xml.radio_preferences, false);
    SharedPreferences pref =PreferenceManager.getDefaultSharedPreferences(this);
    String radioPath = pref.getString("MyText", "default value");
    // Toast.makeText(this, radioPath, Toast.LENGTH_SHORT).show();
    try {
        radioPlayer.reset();
        // radioPlayer.setDataSource("http://31.xx.xxx");
        // Toast.makeText(this, radioPath, Toast.LENGTH_SHORT).show();
        radioPlayer.setDataSource(radioPath);
    } catch {
    }
}

public void editURL() {
    stopPlaying();
    startActivity(new Intent(getBaseContext(), PreferencesActivityTest.class));
}

我正在做一些根本错误的事情,但我需要帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

你是如何调用偏好活动的?如果您直接调用它,则可能需要将调用更改为startActivityForResult,以便在从活动返回后刷新数据