ファイル選択機能の改善 - 壁紙変更アプリ (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);
これで上がれるようになりました。
次は画像以外を弾くかな。