首页 > 解决方案 > 使用设置活动中的条目

问题描述

我对 Android 开发还比较陌生,所以请不要反对我。我的问题是我为我的程序创建了一个偏好活动,但不知道如何访问它,以便其他活动从启动时使用/存储这些值。此外,在默认设置活动中,我没有带箭头的工具栏,可以让我回到第一个活动。我在后箭头上尝试了很多,但不知何故没有任何帮助。非常感谢。

设置-活动:

public class SettingsActivity extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_activity);
    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.settings, new SettingsFragment())
            .commit();


    ActionBar actionBar = getSupportActionBar();

    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

}

public static class SettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey);
    }
}

}

设置-活动

标签: javaandroidandroid-activity

解决方案


首先向您的片段添加一个空的构造函数:

public SettingsFragment() {
}

您的设置活动需要开始监听更改:

@Override
public void onResume() {
    super.onResume();
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener( this );
}

@Override
public void onPause() {
    super.onPause();
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

您还可以onSharedPreferenceChanged根据您的偏好将该函数称为侦听器:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if( key.equalsIgnoreCase( "key1") ) {
        // example use
        ListPreference lp = (ListPreference) findPreference( key );
        lp.setTitle( lp.getEntry() );
        SettingsActivity.FONT_STYLE = lp.getValue();
    }
    else if( key.equalsIgnoreCase( "key2") ) {
        // example use
        ListPreference lp = (ListPreference) findPreference( key );
        lp.setTitle( lp.getEntry() );
        SettingsActivity.FONT_SIZE = lp.getValue();
    }
}

推荐阅读