Androidを開発しているとどうやって楽にデバッグするか悩んでいたときに、メルカリさんのデバッグ機能の記事をみつけた
いいな!!おもしろいな!!やりたいな!!と思い、
PreferenceActivityとかに動的に差し込めたらいいなと思ったときの備忘録
PreferenceFragmentで動的に作成するときの例
デバッグモード上でDBデータのバックアップとリストアができる例
public static class SettingsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_settings); //... 通常のPreferenceの処理 //Debug用の処理 if (BuildConfig.DEBUG) { // RootのPreferenceScreenと // Preferenceを管理しているPreferenceManagerを取得 PreferenceScreen root = getPreferenceScreen(); PreferenceManager manager = getPreferenceManager(); // まずはカテゴリを作る PreferenceCategory category = new PreferenceCategory(root.getContext()); category.setTitle("Debug Mode"); //タイトルは"Debug Mode" root.addPreference(category); //Preferenceのrootにcategoryを追加 // カテゴリに含めるPreferenceScreenを作成&追加 // 新しくPreferenceScreenを作るときはPreferenceManagerを使って作成 PreferenceScreen restore = manager.createPreferenceScreen(root.getContext()); restore.setTitle("リストア"); restore.setOnPreferenceClickListener(preference -> { //...ボタンが押された時の処理 return true; }); category.addPreference(restore); //categoryにPreferenceScreenを追加 // 以下同様 PreferenceScreen backup = manager.createPreferenceScreen(root.getContext()); backup.setTitle("バックアップ"); backup.setOnPreferenceClickListener(preference -> { //...ボタンが押された時の処理 return true; }); category.addPreference(backup); } } }
注意点(というか個人的にはまったポイント)は2つ
- Preferenceの種類によってインスタンスの作り方が異なる
- PreferenceCategoryを作るときは
new PreferenceCategory()
- PreferenceScreenを作るときは
getPreferenceManager().createPreferenceScreen()
- PreferenceCategoryを作るときは
- 作成したPreferenceを追加する順序が重要
- 要素の上から作成&追加していくとうまくいく
root.addPreference(category);
する前にmanager.createPreferenceScreen(root.getContext());
するとExceptionが出てうまくいかない。。。
複数のアプリを作っているから、これを使えば、デバッグモードのハンドリングだけじゃなくて、
どのアプリにも必要な共通的な設定も簡単にモジュール化できそうな予感♪
とりあえず、以上!!
PR
こんなアプリを作っています!!