Articles of preferenceactivity

在Android上构建兼容性PreferenceFragment

我的android应用程序使用兼容性库(特别是Loaders )。 我需要能够在任何地方使用兼容性组件,包括我的PreferenceActivity 。 遗憾的是,支持库不包含基于片段的PreferenceActivity ,也不包括PreferenceFragment类。 我想要创建自己的PreferenceFragmentActivity和CompatPreferenceFragment(基本上是谷歌忽略的)。 其他人,包括StackOverflow上的一些人,已经提到完成这个确切的事情,所以我公开寻求任何forms的帮助 – 指导,提示,建议,代码示例(如果您愿意并且能够分享),或者您认为的任何其他内容与这个问题有关。 如果有人也可以将我引导到人们提交Androidfunction请求的网站,我想将我的名字添加到希望Google在支持库的未来版本中解决此问题的人员列表中。

PreferenceActivity中的DialogFragment

我已经定义了dialogfragments (因为Android文档说它更好,实际上它是)但现在我想在PreferenceActivity使用它。 问题是我不能在那里使用getSupportFragmentManager()而我不能使用PreferenceFragment,因为它不兼容兼容库。 看起来像一个路障场景。 任何人都可以就此提出建议吗?

android – 如何在Android 3.0中为PreferenceActivity设置自定义布局?

我正在使用minSdkVersion =“11”开发应用程序,这是适用于平板电脑和Android 4.0及更新版本的应用程序。 我已经仔细研究过这个话题的互联网,但没有find太多。 要为以前版本的Android SDK实现自定义布局,我们只需要使用ListView创建布局(比如preference.xml),其id等于android.R.id.list并使用setContentView方法。 preference.xml: 在Android 3.0中,事情发生了变化,使用片段实现了Preferences。 这就是我的preference_headers.xml文件的样子: MyPreferenceActivity.java: public class MyPreferenceActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.preference); // Add a button to the header list. if (hasHeaders()) { Button button = new Button(this); button.setText(“Log out”); setListFooter(button); } } /** * Populate the activity with the top-level headers. […]

更改PreferenceScreen时,请保持操作栏显示

我正在尝试在我的偏好设置屏幕中显示操作栏。 为此,我在SettingActivity中添加了以下代码 public class PreferencesActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.preferences_activity); getFragmentManager().beginTransaction() .replace(R.id.container, new PreferencesFragment()).commit(); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } } 然后是我在PreferencesFragment中的其余代码。 这样可以正常工作,但只要按下PreferenceScreen首选项,操作栏就会隐藏。 如果我回到偏好主屏幕,我可以再次看到它。 知道如何显示操作栏(并使用PreferenceScreen标签更新)吗? 编辑:查看PreferenceScreen代码,当单击PreferenceScreen时,它看起来像是一个全屏对话框。 因为我的偏好有标题,所以Dialog也应该显示标题……但事实并非如此 // Set the title bar if title is available, else no title bar final CharSequence title = getTitle(); Dialog dialog = […]

设置多个SharedPreferences实例/文件的默认值

假设我有一个应用程序将首选项保存到两个文件, preferences1.xml和preferences2.xml 。 然后,我可以使用以下代码检索对相应对象的引用: SharedPreferences sharedPrefs1 = getSharedPreferences(“preferences1”, MODE_PRIVATE); SharedPreferences sharedPrefs2 = getSharedPreferences(“preferences2”, MODE_PRIVATE); 通过这种方式,我可以操纵两者的首选项并注册侦听器以进行更改。 我对这两个文件的初始化有一些疑问,使用setDefaultValues : 问题1 – PreferenceFragment上下文 :我创建了一个带有两个PreferenceFragments的PreferenceActivity,并且在每个PredenceFragate的onCreate方法中执行以下代码(对于片段1和2,将X替换为1和2): PreferenceManager pm = getPreferenceManager(); pm.setSharedPreferencesName(“preferencesX”); PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragmentX, false); 我已经看到这两个片段在启动时正确地设置了它们的默认值。但是,鉴于我只能在应用程序的shared_prefs目录中看到一个_has_set_default_values.xml文件,它如何理解属性preferences1.xml和preferences2.xml已经设置好了吗? 在第一个打开的PreferenceFragment中调用setDefaultValues后立即创建此文件,但即使在此之后,如果我打开第二个PreferenceFragment,它也会正确初始化默认值。 它是如何理解它尚未初始化preferences2.xml以及_has_set_default_values.xml的目的是什么,因为它不包含有关哪些优先文件已被初始化的信息? 问题2 – 标准活动上下文 :当我启动我的应用程序时, PreferenceActivity不是第一个启动的活动,用户可能永远不会打开它,所以我想在主Activity中初始化两个首选项文件及其默认值,我怎样才能做到这一点? 对于默认的共享首选项,很容易: PreferenceManager.setDefaultValues(this, R.xml.default_preferences, false); 对于两个首选项文件,我该怎么办? 我无法执行以下操作,因为我无法在PreferenceFragment类中检索PreferenceManager的实例: PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED pm.setSharedPreferencesName(“preferences1”); PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment1, false); […]

如何动态显示和隐藏Android上的首选项?

有没有办法动态显示和隐藏首选项? 在我的情况下,我有一个checkbox首选项,可以禁用或启用2个首选项组之一(“with-”和“without-handicap”组)。 虽然这将是桌面环境中理想的GUI,但“带障碍”几乎占据整个屏幕,而另一个“无障碍”只占用屏幕的一小部分。 我不想同时显示两个组,而是一次只显示其中一个组,并在checkbox更改时动态显示或隐藏2个组。 有没有办法做到这一点?

操作栏主页按钮无法使用嵌套的PreferenceScreen

我find了一种解决方法,可以在嵌套的PreferenceScreen上实际启用ActionBar主页按钮…但是它不会在我的PreferenceActivity中调用OnOptionsItemSelected。 有人知道在嵌套的PreferenceScreen上实际使用主页按钮的方法吗? 这里修改第35条: http://code.google.com/p/android/issues/detail?id=4611 @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { super.onPreferenceTreeClick(preferenceScreen, preference); if (preference!=null) if (preference instanceof PreferenceScreen) if (((PreferenceScreen)preference).getDialog()!=null) ((PreferenceScreen)preference).getDialog().getActionBar().setHomeButtonEnabled(true); return false; }

如何刷新PreferenceActivity以显示设置中的更改?

根据以下代码,您能告诉我如何刷新PreferenceActivity窗口以立即显示设置中的更改吗? 例如:用户点击主chime切换checkbox为true(勾选),我希望用户立即看到其他设置,如ChimeOn15Pastcheckbox也是true(勾选) SharedPreferences.Editor prefEditor = clockSettings.edit(); // Allow the settings to be changed. if (booleanMasterChimeToggle == true) { prefEditor.putBoolean(“ChimeOnTheHour”, true); prefEditor.putBoolean(“ChimeOn15Past”, true); prefEditor.putBoolean(“ChimeOn30Past”, true); prefEditor.putBoolean(“ChimeOn45Past”, true); strNotifyMessage = “Full chiming has now been set.”; } else { prefEditor.putBoolean(“ChimeOnTheHour”, false); prefEditor.putBoolean(“ChimeOn15Past”, false); prefEditor.putBoolean(“ChimeOn30Past”, false); prefEditor.putBoolean(“ChimeOn45Past”, false); strNotifyMessage = “Full chiming has now been disabled.”; }

屏幕旋转时,为什么片段不会保留状态?

我在PreferenceFragment中获取一些自定义DialogPreference子类时遇到了一些麻烦,以便在旋转屏幕时保持可见。 我在使用PreferenceActivity时没有遇到这个问题,因此我不知道它是Android错误还是代码问题,但我希望有人确认他们是否有相同的体验。 要对此进行测试,首先要创建一个包含至少一个DialogPreference的首选项屏幕(哪个子类无关紧要)。 然后在PreferenceActivity中显示它。 运行应用程序时,按DialogPreference以显示它的对话框。 然后旋转屏幕以使方向发生变化。 对话框是否仍然可见? 然后尝试相同,但使用PreferenceFragment显示您的首选项而不是PreferenceActivity。 再次,旋转屏幕时对话框是否仍然可见? 到目前为止,我发现如果使用PreferenceActivity,对话框将保持可见,但如果使用PreferenceFragment则不会。 查看DialogPreference的源代码 ,似乎正确的行为是对话框保持可见,因为isDialogShowing是在屏幕isDialogShowing上调用onSaveInstanceState()时保存的状态信息。 因此,我认为一个错误可能会阻止PreferenceFragment(及其中的所有内容)恢复该状态信息。 如果它是Android错误,那么它具有深远的影响,因为任何使用PreferenceFragment的人都无法保存和恢复状态信息。 有人可以确认吗? 如果它不是一个错误,那么发生了什么?

没有弃用方法的首选项

我试图(正确)实现一个首选项屏幕,但问题是用于从XML文件中读取首选项的所有方法都被弃用(或者我只是不认识它们)。 开发站点( PreferenceActivity )上的官方示例代码使用不推荐使用的方法。 有没有人find一种方法来实现一个XML文件的喜好屏幕,但不使用:addPreferencesFromResource(int)或findPreference(CharSequence)? 或者有方法被标记为弃用而不实现替代呢? 编辑:开发Android版本2.1