ウェブアプリケーション,インジェクション,コマンドインジェクション

Androidアプリ開発 データを持続させる

preferenceスクリーンを作る

Creating a Preference Screen

ユーザの優先権をロード・セーブする
Androidアプリケーションの中からキー/値のペアを保存するために
SharedPreferencesオブジェクトを使う方法を示しました。
もし開発者がユーザにそれらデータの値を直接編集させたいとしたら、
prefertenceアクティビティが使えます。
Sharedpreferencesオブジェクトに保存するためにキー/値ペアを
プログラム的に作っていく代わりに、XMLファイルにいろんなキーを
定義できます。このフォルダの中で、XMLファイルを作り、
myapppreferences.xmlのように何か意味あるものにそのファイルを
名づけます。名付けたXMLファイルは以下のように設定します。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
  <PreferenceCategry android:title="Category 1" >
   <CheckBoxPreference
    android:defaultValue="false"
    android:key="checkboxPref"
    android:summary="True or False"
    android:title="Checkbox" />
  </PreferenceCategory>

  <PreferenceCategory android:title="Category 2" >
   <EditTextPreference
    android:defaultValue~"[Enter a string here]"
    android:key="editTextPref"
    android:summary="Enter a string"
    android:title="Edit Text" />

  <RingtonePreference
   android:key="ringtonePref"
   android:summary="Select a ringtone"
   android:title="Ringtone" />

   <PreferenceScreen
    android:key="secondPrefScreenPref"
    android:summary="Click here to go to the second Preference Screen"
    android:title="Second Preference Screen" >
    <EditTextPreference
     android:key="secondEditTextPref"
     android:summary="Enter a string"
     android:title="Edit Text(second Screen)" />
   </PreferenceScreen>
  </PreferenceCategory>
</PreferenceSccreen>

開発するプロジェクトのパッケージ内では、新しいJavaクラスファイルを
加え、AppPreferenceActivity.javaと名づけます。
AppPreferenceActivity.javaファイルの設定は以下のようにします。

package net.learn2develop.preferencescreens;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class AppPreferenceActivity extends PreferenceActivity{
  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);

   //---load the preferences from an XML file---
   addPreferencesFromResource(R.xml.myapppreferences);
  }
}

AppPreferenceActivityクラスはPreferenceActivity基底クラスの
拡張であることに気づくでしょう。このAppPreferenceActivityクラスを
作ったときに、そのクラスはaddPreferenceFromResource()メソッドを
myapppreferences.xmlファイルから優先キーをロードするために
使います。
AppPreferenceActivityクラスを呼び出せる様にするためには、
AndroidManifest.xmlファイルにAppPreferenceActivityクラスを
宣言する必要があります。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="net.learn2develop.preferencescreens"
  android:versionCode="1"
  android:versionName="1.0" >

  <uses-sdk
   android:minSdkVersion="8"
   android:targetSdkVersion="15" />

  <application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <activity
    android:name="./MainActivity"
    android:label="@string/title_activity_main" >
    <intent-filter>
     <action android:name="android.intent.action.MAIN" />

     <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
   </activity>

   <activity android:name=".AppPreferenceActivity"
      android:lavel="@string/app_name" >
    <intent-filter>
     <action android:name="net.learn2develop.AppPreferenceActivity" />
     <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
   <activity>
  /application>
<maifest>

AppPreferenceActivityクラスを表示するためには、
以下のようにIntentオブジェクトを使います。

package net.learn2develop.preferencescreens;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity{
  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   Intent i = new Intent("ner.learn2develop.AppPreferenceActivity");
   startActivity(i);
  }
}

キー/値のペアは/data/data/<パッケージ名>/shared_prefs
フォルダに保存され、<パッケージ名>_preferences.xmlと
名付けられます。
優先ファイルに保存されたキー/値のペアをプログラム的に検索するには、
ユーザの優先権をロード・セーブする
示したgetSharedPreferences()メソッドを使います。

package net.learn2develop.preferencescreens;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity{
  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

   /*
   Intent i = new Intent(net.learn2develop.AppPreferenceActivity");
   startActivity(i);
   */

   SharedPreferences appPrefs = getSharedPreferences(
    "net.learn2develop.preferenceScreens_preferences", MODE_PRIVATE);

   Toast.makeText(getBaseContext(), appPrefs.getString(#editTextPref",""),
       Toast.LENGTH_LONG).show();
  }
}

もし優先ファイルの初期設定名を変更したい場合は、
PreferenceManagerクラスを使えて、setSharedPreferencesName()
を使い、メソッドを名づけたい名前にセットします。

package net.learn2develop.preferencescreens;

import android.os.Bundle;
import android.preference.preferenceActivity;
import android.preference.PreferenceManager;

public class AppPreferenceActivity extends PreferenceActivity{
  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);

   PreferenceManager prefMgr = getPreferenceManager();
   prefMgr.setSharedPreferencesName("appPreferences");

   //---load the preferences from an XML file---
   addPreferencesFromResource(R.xml.myapppreferences);
  }
}

上のコードはappPreferences.xmlとして優先ファイルをセットします。
shared_prefsフォルダを再度見ることでこれを確認できます。
今回は、appPreferences.xmlファイルが作られました。

新しく作られた優先ファイルをプログラム的に検索するには、
変更した名前をgetSharedPreferences()メソッドに適切に
渡させます。

@Override
public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  /*
  Intent i = new Intent("net.learn2develop.AppPreferenceActivity");
  startActivity;
  */

  /*
  Sharedpreferences appPrefs = getSharedPreferences(
      "net.learn2develop.PreferenceScreens_preferences",MODE_PRIVATE");
  */

  SharedPreferences appPrefs = getSharedPreferences(
    "appPreferences", MODE_PRIVATE);

  Toast.makeText(getBaseContext(),appPrefs.getString("editTextPref", ""),
      Toast.LENGTH_LONG).show();
}
ホーム
便利堂ロゴ
inserted by FC2 system