エンジニア未満がエンジニア以上を目指す日々(仮)

戦力外通告の悔しさをバネに自身の技術力向上を目指した技術ブログ

ファイル選択機能の改善 - 壁紙変更アプリ (10)

やっと落ち着いてきたので、残念実装を改善します。

ほんとに掘り進むだけで上に上がれません

で、これに対して先週、

今まで実装してきた onItemClick でディレクトリ移動を実現しようとしたけれど、どうにもうまくいかず。
ファイル選択を分けるかなぁ。

とか言ってたわけですが、普通にディレクトリパスの情報を持っているので、
それを使えば何も問題ありませんでした。。
というのを気づかせてくれたのはこちらのサイト。
ファイル選択ダイアログ | みるくあいらんどっ!

この辺りが素直に出てこないのは実装経験の不足が原因ですね。精進します。

で、修正内容としては、上位パスに移動する ".." を追加。
ただ、今回は item_list の順番がずれるのが面倒だったので、
item_list の最後に追加してます。

        files = new File("/storage/sdcard0/").listFiles();

        // Get files list
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                item_list.add(files[i].getName());
            }
            item_list.add("..");
        }

onItemClik() で ".." を識別したら、
直前のパスを処理して、一つ上の階層のファイルリストを取得して表示。
ディレクトリの場合は直前のパスを保存しておきます。

                if(item_list.get(position) == "..") {
                    item_list.clear();
                    prePath = prePath.substring(0,prePath.lastIndexOf(File.separator));
                    files = new File(prePath).listFiles();

                    if (files != null) {
                        for (int i = 0; i < files.length; i++) {
                            item_list.add(files[i].getName());
                        }
                        item_list.add("..");
                    }
                    ArrayAdapter<String> arrayadapter = new ArrayAdapter<String>
                            (SubActivity.this, android.R.layout.simple_expandable_list_item_1, item_list);
                    listview.setAdapter(arrayadapter);
                } else if(files[position].isDirectory() == true) {
                    item_list.clear();
                    prePath = files[position].getPath();
                    Log.v(TAG, "prePath = "+prePath);
                    files = new File(files[position].toString()).listFiles();
                    if (files != null) {
                        for (int i = 0; i < files.length; i++) {
                            item_list.add(files[i].getName());
                        }
                        item_list.add("..");
                    }
                    ArrayAdapter<String> arrayadapter = new ArrayAdapter<String>
                            (SubActivity.this, android.R.layout.simple_expandable_list_item_1, item_list);
                    listview.setAdapter(arrayadapter);

これで上がれるようになりました。

f:id:hielf:20140809165307p:plain:w300

次は画像以外を弾くかな。