簡體   English   中英

OnPreferenceChangeListener

[英]OnPreferenceChangeListener

我在首選項菜單中有一個EditText ,它允許我編輯URL地址。 問題是,當我在“首選項”菜單中單擊“確定”后,在mainActivity中獲得的首選項值沒有立即更新時。 不知道如何解決此問題。 我嘗試了很多想法,最后決定問。

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()我可以看到該值OnResume()我從EditTextPreferencePreferenceActivityTest修改的值更新。 我想做的就是將此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));
}

我做的事情根本上是錯的,但我需要幫助。 先感謝您 !

您如何稱呼偏好活動? 如果直接調用它,則可能需要將調用更改為startActivityForResult,以便從Activity返回后刷新數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM