preferenceを使って設定画面を作成してみる

Androidには、アプリのデータを保存する機能の1つとして、
preference(プレファレンス)という機能があります。

今回は、そのpreferenceを使用して設定画面を作成していきましょう。

preference機能は、xmlファイルに設定情報を保持するため、
sqlite(データベース)を必要としないため、簡単に実装することができます。

まず、PreferenceFragmentを継承したクラスを作成します。

15行目で読み込む「R.xml.preference」は、
resフォルダ配下にxmlフォルダを新規に作成し、
preference.xmlという名前のファイルを新規に作成します。

simple-pref-01

このpreference.xmlには、設定画面の内容を定義していきます。
今回はチェックボックスを2つ置いていきます。
内容は以下の通りです。

res/string.xmlに、ここで設定するタイトルやサマリーに表示する文章を定義していきます。

続いて、設定画面表示用のActivityを作成します。

先ほど作成したSimplePreferenceFragmentのインスタンスを
Activity管理下のFragmentManagerに渡します。(7~8行目)

これで設定画面の出来上がりです。

それでは、メインのActivityから、このSimplePreferenceActivityを呼び出してみましょう。
今回はメニューから呼び出してみます。

メニューの設定をクリックした時に、
設定画面用のActivityを呼び出すようにしてみました。(26~29行目)

それでは、実行してみます。

simple-pref-02

右上のメニューをクリックします。

simple-pref-03

My設定をクリックします。

simple-pref-04

先ほど作成したチェックボックスが無事、表示されました。

チェックボックスにチェックをした後に、一度アプリを終了させ
再度、起動後に設定画面を開くと、チェック状態が保持されいると思います。

preferencesに設定されている情報は、以下のように簡単に取得が可能です。
preference.xmlで定義したキー情報を元に取得します。

【補足】
Android API Level 10までは、PreferenceActivityを継承したクラスを使用する方法が一般的でしたが、
Android API Level 11以降は、このPreferenceFragmentを継承したクラスを使用することが推奨されいます。

Android API Level 11以降で、PreferenceActivityを継承して実装した場合、
addPreferencesFromResourceメソッドで非推奨の警告が出ます。

コメント

  • はじめまして。今androidのアプリ開発を勉強しているものです。

    大変参考にさせていただいています。
    その中で、「preferenceを使って設定画面を作成してみる」ページを実践してみているのですが、
    機種が異なるためか、、バージョンなのか、、、わかりませんが、画面のように「・・・」が
    出てこないで、下の方からメニューが出てくる状態になっています。これは設定の違いですか?

    あと、preference.xmlの名前は変更したうえで、
    addPreferencesFromResource(R.xml.preference);
    の部分を書き換えています。

    ですが、このメニューを押下すると、ページが無いのか、見つからないのか、アプリが停止してしまうのです。
    変えているのは、このxmlだけのはずなのですが、
    ページ切り替えがうまくいかず悩んでいます。

    どうかご教授よろしくお願いします。

    by そら    2014年11月20日 1:16 PM

    • はじめまして。コメントありがとうございます。
      ご連絡遅れてしまい、申し訳ございません。

      preference画面が表示できないということですが、
      たしかにAndroidのAPIのバージョンによっては、
      記事中で使用している「PreferenceFragment 」が使用できません。

      「PreferenceFragment 」を継承したActivityクラスにてご説明していますが、
      古いバージョンの場合、「PreferenceActivity 」を継承します。

      メニュー押下時、エラーログのようなものは出力されていますでしょうか。
      開発しているAndroidのバージョン、実行時のエラーログ、ソースコードなどがあれば
      もう少し的確なアドバイスができると思います。

      by yocchin    2014年12月1日 9:03 PM

  • いろいろ見ていたら動き出しました。
    string.xmlかmain.xmlに足りない設定があったため、
    追記をしたら動き出しました。

    ありがとうございました。

    by そら    2014年12月2日 11:03 AM

コメントを残す




関連記事

関連記事はありません

Menu

HOME

 TOP