2016-12-14 74 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

(不知道是否是張貼我的「自我回答」這樣正確的事的一段時間後,以「接受」它。)