設定画面を作る (5/6)
作成:2010-11-06 21:42
更新:2011-10-19 17:19
更新:2011-10-19 17:19
■アクティビティから設定内容を取得する
これで設定は一応用意できましたが、これだけではほとんど意味がありません。設定の内容をアクティビティから取り出したりして利用できなければ役に立ちませんね。では、作成したサンプルを修正して、設定の内容をアクティビティから利用してみましょう。これは通常のアクティビティ(ここではMySample)クラスと、設定ファイルのPreferenceActivityクラスの両方を修正してやります。
まずは、MySampleからです。下のリストに、MySampleクラスの修正例をあげておきます。ここでは、いくつかの修正を行っています。先のサンプルと同じようにオプションメニューから設定画面を呼び出し、設定を行ってから戻ると、画面に設定の内容が表示され、同時にトーストで設定値が表示されるようにしてあります。
・openPrefメソッド
設定ファイルのPreferenceActivityを起動する処理をここで行っていますが、作成したインテントをスタートするのに「startActivityForResult」というメソッドを使っています。これは、実行後したアクティビティから処理を返すためのものです。このstartActivityForResultでアクティビティを起動すると、そのアクティビティを終了する際、呼び出したアクティビティのonActivityResultメソッドが呼び出されます。これにより、呼び出したアクティビティの終了時に処理を行わせることができます。
このonActivityResultでは、実行するインテントの他にint値が引数に指定されています。これは「リクエストコード」というものです。終了時にstartActivityForResultが呼び出される際、このリクエストコードが引数として渡されるのです。これにより、どのアクティビティが終了したのかをチェックすることができるというわけです。
・startActivityForResultメソッド
今回、新たに追加されたメソッドです。上で触れたように、startActivityForResultで実行したアクティビティを終了すると、このメソッドが呼び出されます。引数には、startActivityForResultで指定したリクエストコード、そしてアクティビティからの実行結果に関するリゾルトコード番号、そしてIntentが渡されます。先にstartActivityForResultで指定したリクエストコードと、この引数で返されたリクエストコードが同じものなら、そのアクティビティが終了したとわかるわけです。
ここでは、設定の値を取得するのに、MySamplePrefActivityクラスの「getMyName」「getMyList」といったメソッドが呼び出されています。アクティビティが異なるので、直接、このアクティビティからPreferenceActivityで保存した値を取り出すことができません。そこで、PreferenceActivityクラス側に、設定の値を返すメソッドをクラスメソッドとして用意し、これを呼び出して値を取り出すようにします。この値取得用のメソッドが「getMyName」「getMyList」というわけです。
メソッドでは、これらの値で取り出した値を使い、textview01にテキストを設定し、Toastインスタンスを作ってshowしています。
後は、PreferenceActivityクラス側に、getMyName、getMyListといったメソッドを用意すればいいわけですね。
まずは、MySampleからです。下のリストに、MySampleクラスの修正例をあげておきます。ここでは、いくつかの修正を行っています。先のサンプルと同じようにオプションメニューから設定画面を呼び出し、設定を行ってから戻ると、画面に設定の内容が表示され、同時にトーストで設定値が表示されるようにしてあります。
・openPrefメソッド
設定ファイルのPreferenceActivityを起動する処理をここで行っていますが、作成したインテントをスタートするのに「startActivityForResult」というメソッドを使っています。これは、実行後したアクティビティから処理を返すためのものです。このstartActivityForResultでアクティビティを起動すると、そのアクティビティを終了する際、呼び出したアクティビティのonActivityResultメソッドが呼び出されます。これにより、呼び出したアクティビティの終了時に処理を行わせることができます。
このonActivityResultでは、実行するインテントの他にint値が引数に指定されています。これは「リクエストコード」というものです。終了時にstartActivityForResultが呼び出される際、このリクエストコードが引数として渡されるのです。これにより、どのアクティビティが終了したのかをチェックすることができるというわけです。
・startActivityForResultメソッド
今回、新たに追加されたメソッドです。上で触れたように、startActivityForResultで実行したアクティビティを終了すると、このメソッドが呼び出されます。引数には、startActivityForResultで指定したリクエストコード、そしてアクティビティからの実行結果に関するリゾルトコード番号、そしてIntentが渡されます。先にstartActivityForResultで指定したリクエストコードと、この引数で返されたリクエストコードが同じものなら、そのアクティビティが終了したとわかるわけです。
ここでは、設定の値を取得するのに、MySamplePrefActivityクラスの「getMyName」「getMyList」といったメソッドが呼び出されています。アクティビティが異なるので、直接、このアクティビティからPreferenceActivityで保存した値を取り出すことができません。そこで、PreferenceActivityクラス側に、設定の値を返すメソッドをクラスメソッドとして用意し、これを呼び出して値を取り出すようにします。この値取得用のメソッドが「getMyName」「getMyList」というわけです。
メソッドでは、これらの値で取り出した値を使い、textview01にテキストを設定し、Toastインスタンスを作ってshowしています。
後は、PreferenceActivityクラス側に、getMyName、getMyListといったメソッドを用意すればいいわけですね。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package jp.tuyano.sample; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.*; import android.view.MenuItem.OnMenuItemClickListener; import android.widget.*; public class MySample extends Activity { public TextView textview01; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textview01 = (TextView)findViewById(R.id.TextView01); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuItem pref_item = menu.add("Pref"); OnMenuItemClickListener listener = new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { openPref(); return false; } }; pref_item.setOnMenuItemClickListener(listener); return true; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 123){ String myname = MySamplePrefActivity.getMyName(this); String mylist = MySamplePrefActivity.getMyList(this); String res = "my Name: " + myname + "\n" + "My List: " + mylist; textview01.setText(res); Toast toast = Toast.makeText(this, res, Toast.LENGTH_LONG); toast.show(); } super.onActivityResult(requestCode, resultCode, data); } public void openPref(){ Intent intent = new Intent(this, (Class<?>)MySamplePrefActivity.class); startActivityForResult(intent,123); } }
※関連コンテンツ