DialogFragment で、ファイルChooser(1)

DialogFragment で、ファイルChooser なるものを作ってみた。
画面回転など、配慮すべきことが結構あった。
最初に作るパターンは、選択して背景色を変えてから、OKボタンで選択したものの処理をする形式である。
OKボタンなしのワンタッチで選択→処理の形式はこの後にする。

f:id:posturan:20160313194442p:plain


スマートフォン上でファイルシステムを意識させるアプリって意味あるのかと疑問に思ったけど
では、なぜPCは今まで意識させてきたのかという意識もあって作った。

まずは、準備として File.listFiles の結果、フォルダを優先して表示するためのソート

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
/**
 * FilesUtil
 */
public final class FilesUtil{
   private FilesUtil(){}
   public static List<File> sort(File[] files){
       List<File> rtn = new ArrayList<File>();
       Set<File> dirSet = new TreeSet<File>(new FileComparator());
       Set<File> fileSet = new TreeSet<File>(new FileComparator());
       for(File file:files){
          if (file.isDirectory()){
             dirSet.add(file);
          }else{
             fileSet.add(file);
          }
       }
       for(File file:dirSet) rtn.add(file);
       for(File file:fileSet) rtn.add(file);
       return rtn;
   }
}
-------------------------------------------
import java.io.File;
import java.util.Comparator;
/**
 * FileComparator
 */
public class FileComparator implements Comparator<File>{
   @Override
   public int compare(File lhs, File rhs){
      return lhs.getName().compareTo(rhs.getName());
   }
}
-------------------------------------------
ダイアログとして表示するレイアウトは、動的に作ることにするため必要なく
1行分の表示レイアウト:filechooser_select_row.xml を以下のとおり用意する。

行選択状態で背景色を変えたいので、過去、以下で投稿した
http://blog.zaq.ne.jp/oboe2uran/daily/201303/07
android.widget.Checkable 実装のカスタマイズの方法を使って、用意する。

<?xml version="1.0" encoding="utf-8"?>
<yip.yip.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/yip.sample3"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:selectedBackgroundColor="#ff33b5e5"
    app:defaultBackgroundColor="#222222"
    android:gravity="center_vertical"
    android:orientation="horizontal" >
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_menu_folder" />
    <TextView
        android:id="@+id/fileTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:text="TextView" />

</yip.yip.CheckableLinearLayout>


フォルダのアイコン画像、ファイルのアイコン画像を用意しておく。

続きは、次の投稿、 DialogFragment で、ファイルChooser(2)で。。。