2016-12-14 35 views
0

Androidアプリプログラミングの新機能です。何かをして学ぶが、いくつかのことは奇妙に不透明に見える。簡単なアプリをMainActivityと設定オプション付きのメニューにしてください。defaultSharedPreferencesをaddPreferencesFromResourceに接続するにはどうすればよいですか?

私のバージョン番号を1つの場所(アプリケーション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を生成し、でも素朴なユーザーが伝えることができるようになりますように、私はこれを行う267
を構築し、7をリリース私はちょうど私が必然的なサポートの呼び出しを得るときに彼らが使用しているバージョン/リリースを正確に。

この文字列を保存して取得するには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> 

とs trings.xmリットルが

0を持っています(自然に)私の " settings.xml" リソースファイルから設定

実際の値で上書きされる偽の文字列です。

私の質問:

どのように(つまりどこ)は、設定ビューに表示されますので、というのが私のsettings.xmlに表示されるように、私は私がSharedPreferences(隠された)ファイルに保存した変更を取得するのですか? settings.xmlまたは設定ビューに直接保存できる場合は、SharedPreferencesの手順をスキップできます。

私は多くの検索を行っていますが、2つを接続する方法がないようです。例とチュートリアルでは、両方の方法を説明しますが、接続方法は説明しません([設定]メニューに保存された環境設定を表示する)。

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にアクセスして、値を変更して設定ビューに追加する方法が見つかりません。理論的には、断片を切り開いて1つを変え、それをビューに表示できるようにする必要がありますが、それらを処理する方法は見つけられません。 SharedPreferencesには、実行可能なキーと値のペアシステムがあります。

PreferenceFragment.setValue (String key, String value)またはedit()のようなものは見つかりませんでした。

たとえば、この質問How to get a preference value in preference fragmentには、フラグメント内にSharedPreferencesという回答がありますが、設定ビューと関連付ける方法については本当に質問に答えていません。私はそこに保存されたSharedPreferencesの値を読んで見ることができますが、それをフラグメントの階層に張ったり、設定ビューに追加する方法はありますか?

+0

おかげCharuka。 – Alan

答えて

0

みんなありがとう。

複数の例を読んで複数の実験を行い、私の知恵の終わりに達して質問を投稿した後、私は突然答えを見つけたかもしれません。しかし、それは少し不透明で、直感的ではありません。

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

...動作するようです:フラグメントのonCreate

は、私はこれを試してみました。どのような安堵! SharedPreferencesは常に「価値キー」を論じているので

setTitleは私には直感的ではありませんでしたが、私はチュートリアルを再読し、コードの異なる種類(Headers)中(setSummary)似たようなものの、何とかそれは何を探している私を設定しますsetTitleであることがわかった。

(このように私の「自己の答えを」投稿するか、一定の期間後にそれを「受け入れる」ことは正しいことであるかどうかを知るしないでください。)

関連する問題