AlertDialogでファイル一覧から選択させて開く

この辺のサンプルでは、ダイアログをクリックさせて「何番目をクリックしたか」を取得しているけど、スコープの関係でファイルを開いてViewに表示する関数を呼ぶとかはできない。


リストダイアログ - 橋本詳解 でスコープの関係でfinalつけた変数を渡してたけど
よく考えたらJavaは複数のinterfaceをimplementsできるから、DialogInterface.OnClickListenerも実装してしまえばいいのだった



ファイル開く loadFile(File f) 関数を持っているクラス自らimplementsする
SDカード内のファイルの読み書き - 橋本詳解を基にしている

public class Test extends Activity implements View.OnClickListener, DialogInterface.OnClickListener{
   private String[] dialog_fileNames;
}

dialogに表示したファイル名の配列は、後で使うのでメンバとして持っておく。



new File("/path/to/dir").listFiles(); とかでファイル名の一覧を取得しておいて、
String[] fileNamesを作る。これをダイアログに表示する。onClickのリスナとして自分を登録。

this.dialog_fileNames = fileNames;
new AlertDialog.Builder(this).setTitle("select").setItems(fileNames, this).show();

これでダイアログが表示される。
list dialog



んで自ら DialogInterface.OnClickListener をimplementsしてるから、onClickで選択されたダイアログと、上から何番目が選択されたかが取得できる
これで同じinstanceのメソッドからになるのでloadFile(File f)が呼び出せる

public void onClick(DialogInterface dialog, int which) {
    Log.v("selected index", Integer.toString(which));
    File f = new File(this.dialog_fileNames[which]);
    this.loadFile(f);
}