Android Binding 〜SDカードファイルビュー〜
今日も昨日の続きです。今日はこんなメニューを考えています。
- 表示階層の復帰
- 表示位置の復帰
ちょっと地味な感じですが、ユーザエクスペリエンスの観点から言うととっても重要なファクターです。一つ一つ見ていきましょう。まずは表示階層の復帰です。
現時点のアプリは、たとえば音楽ファイルをタップしてから、音楽プレイヤーを起動して、その後戻るとSDカードの最上位階層に戻ってしまいます。
原因は単純、現在表示中の階層を保存していないからです。本当はAndroid bindingフレームワークの枠組みの中で保存・復帰出来ればいいのですが、どうもなさげです。なので、ごりごり行きます。
まずはViewModelクラスに現在表示中の階層 (パス) を取得するメソッドを準備します。
◆ViewModelクラス
public String getCurrentPath() { return CurrentPath.get(); }
このメソッドを使って、Activityの状態保存・復帰イベントで保存・復帰します。
◆Activityクラス
private static final String CURRENT_PATH = "CURRENT_PATH"; private String _currentPath = Environment.getExternalStorageDirectory().getPath(); @Override protected void onResume() { super.onResume(); _model.setPath(_currentPath); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); _currentPath = savedInstanceState.getString(CURRENT_PATH); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); _currentPath = _model.getCurrentPath(); outState.putString(CURRENT_PATH, _currentPath); }
う〜ん、ベタベタですね。でもこれで一つ目の課題をクリア出来ました。二つ目の課題は表示位置の復帰です。理想型は現在表示中の階層よりも上の階層の表示位置を保存、復帰出来ることです。次のようなテーブルを保存出来ればいい感じです。
パス | 表示開始位置 |
---|---|
/mnt/sdcard | 5 |
/mnt/sdcard/Music | 0 |
/mnt/sdcard/Music/Pop | 4 |
現在表示中の階層の親階層のみ保存するのがポイントです。そうしないと際限なくなりますからね。先ほどの表示階層と同じように保存するにはParcelableインターフェイスを実装しないといけないので、ちょっと置いておいて、まずはメモリ上だけで保存、復帰出来るようにします。