如何将defaultSharedPreferences与addPreferencesFromResource连接?
新的Android应用程序编程。边做边学,但有些东西看起来奇怪不透明。有一个简单的应用程序与MainActivity
和菜单与设置选项。如何将defaultSharedPreferences与addPreferencesFromResource连接?
我希望能够在一个地方设置我的版本号(应用程序build.gradle
文件)。我手动更改版本名称和内部版本号(versionCode)永久增量。
def Properties versionProps = new Properties()
def versionPropsFile = file('version.properties')
if (versionPropsFile.exists())
versionProps.load(new FileInputStream(versionPropsFile))
def buildNum = (versionProps['BUILD_number'] ?: "0").toInteger() + 1
versionProps['BUILD_number'] = buildNum.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
applicationId "com.someCorp.someApp"
minSdkVersion 22
targetSdkVersion 25
versionCode buildNum
versionName "0.2.7"
}
在我的应用程序,我得到的versionCode
和versionName
和我分手后到主要,次要,和我的版本类释放。
PackageInfo packageInfo = getPackageManager().getPackageInfo (getPackageName(), 0);
int versionBuild = packageInfo.versionCode;
String versionName = packageInfo.versionName;
myVersion = new Version (versionBuild, versionName);
myversion.toString()
产生
someApp版本0.2.7.267 \ nMajor版本0,次版本2,版本7,建立267
我这样做,所以,即使是天真的用户将能够告诉当我得到不可避免的支持电话时,我确切知道他们使用的是哪个版本/发行版。
然后,我可以使用defaultSharedPreferences
保存此字符串并检索它。
然而,当我使用做了设置/首选项菜单项,运用现代PreferenceFragment
方式如下推出的PreferenceActivity
子类的推荐方式...
public boolean onOptionsItemSelected (MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings_item:
Intent i = new Intent (this, someAppPreferenceActivity.class);
startActivityForResult (i, RESULT_SETTINGS);
break;
.
public class someAppPreferenceActivity extends PreferenceActivity {
public void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
getFragmentManager().beginTransaction().replace (android.R.id.content, new MyPreferenceFragment()).commit();
} // OnCreate (Bundle)
public static class MyPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate (final Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
addPreferencesFromResource (R.xml.settings);
} // onCreate (Bundle)
} // class MyPreferenceFragment
...设置视图显示
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
android:key="pref_version"
android:title="@string/pref_version"
android:summary="@string/pref_version_summ"
android:defaultValue="true" />
</PreferenceScreen>
和Strings.xm
升有
settings.xml
” 资源文件(自然)设置
这是一个假的字符串,意思是用实际值覆盖。
我的问题:
我如何改变我保存在SharedPreferences
(隐藏)文件(无论是)出现在我的settings.xml
,使他们出现在设置有何看法?如果我可以直接保存到settings.xml
或设置视图,我可以跳过SharedPreferences
步骤。
我已经做了很多搜索,但似乎没有办法将两者连接起来。示例和教程解释了两种做事方式,但不解释如何连接它们(获取保存的偏好以显示在“设置”菜单中)。
http://www.101apps.co.za/index.php/articles/preference-settings.html
HTTP://viralpatel.net/blogs/android-preferences-activity-example/
HTTPS://developer.android.com/reference/android/preference/PreferenceActivity.html
我无法找到访问PreferencesFromResource
的方法,以便在将值添加到“设置”视图中之前更改该值。从理论上讲,我应该能够遍历片段并更改片段并将其显示在视图中,但我找不到方法来逐步浏览片段。 SharedPreferences
有一个可行的键值对系统,很好。
我找不到像PreferenceFragment.setValue (String key, String value)
或edit()
之类的东西。
例如,这个问题How to get a preference value in preference fragment有一个答案在片段内部得到SharedPreferences
,但并没有真正回答关于如何将它们与“设置”视图结合在一起的问题。我可以阅读并查看已保存的SharedPreferences
值,但是如何将其粘贴到碎片的层次结构中或将其添加到“设置”视图中?
感谢您的期待,每个人。
在几天的时间里阅读了很多例子,并进行了多次实验并得到我的智慧结束并因此发布了这个问题后,我可能突然发现了答案(发布问题后)。但它有点不透明,不直观。
在该片段中的onCreate
我尝试这样做:
addPreferencesFromResource (R.xml.settings);
Preference myPref = findPreference ("pref_version");
myPref.setTitle (MainActivity.myVersion.toString());
...这似乎工作。终于解脱了!
setTitle
不直观,对我来说,因为SharedPreferences总是讨论“价值的关键”,但我重读的教程,虽然在不同类型的代码(Headers
)类似的东西(setSummary
),不知何故,让我找什么原来是setTitle
。
(不知道是否是张贴我的“自我回答”这样正确的事的一段时间后,以“接受”它。)
感谢Charuka。 – Alan