2016-12-14 75 views
0

新的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" 
} 

在我的应用程序,我得到的versionCodeversionName和我分手后到主要,次要,和我的版本类释放。

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升有

0:从我的 “ 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值,但是如何将其粘贴到碎片的层次结构中或将其添加到“设置”视图中?

+0

感谢Charuka。 – Alan

回答

0

感谢您的期待,每个人。

在几天的时间里阅读了很多例子,并进行了多次实验并得到我的智慧结束并因此发布了这个问题后,我可能突然发现了答案(发布问题后)。但它有点不透明,不直观。

在该片段中的onCreate我尝试这样做:

 addPreferencesFromResource (R.xml.settings); 
    Preference myPref = findPreference ("pref_version"); 
    myPref.setTitle (MainActivity.myVersion.toString()); 

...这似乎工作。终于解脱了!

setTitle不直观,对我来说,因为SharedPreferences总是讨论“价值的关键”,但我重读的教程,虽然在不同类型的代码(Headers)类似的东西(setSummary),不知何故,让我找什么原来是setTitle

(不知道是否是张贴我的“自我回答”这样正确的事的一段时间后,以“接受”它。)