Android Binding 〜SDカードファイルビュー〜

今日も昨日の続きです。今日はこんなメニューを考えています。

  1. 表示階層の復帰
  2. 表示位置の復帰


ちょっと地味な感じですが、ユーザエクスペリエンスの観点から言うととっても重要なファクターです。一つ一つ見ていきましょう。まずは表示階層の復帰です。

現時点のアプリは、たとえば音楽ファイルをタップしてから、音楽プレイヤーを起動して、その後戻ると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インターフェイスを実装しないといけないので、ちょっと置いておいて、まずはメモリ上だけで保存、復帰出来るようにします。