ファイル選択ダイアログ ( AlertDialog + ListView )

(開発環境として「Eclipse」を使用した、古い情報です。
 開発環境として「Android Studio」を使用した、新しい情報は、
 「ホーム > プログラミング > Android プログラミング」からたどれます。)

解説

標準では、ファイル選択ダイアログに関する関数、クラスは用意されていないので、自作します。

実現方法としては、AlertDialog に ListView を View として登録する方法で実現します。

ファイル選択ダイアログに関するクラスとしては、3つのクラスを作成します。
・ファイル選択ダイアログの作成と表示を行うファイル選択ダイアログクラス
・ListViewの表示要素を管理するファイル情報配列アダプタクラス
・ListViewで表示するときの一要素にあたるファイル情報クラス

サンプルコード

サンプルアプリの仕様

プロジェクトの作成

(開発環境としては、Eclipse 3.7.2 ベースの Pleiades を使用しています)

(この設定でプロジェクトを作成しなければいけない、というわけではありません。)

Eclipseを起動します。

メニュー 「ファイル > 新規 > プロジェクト」 を選択します。


Android プロジェクトを選択し、「次へ」ボタンを押します。


Project Name にプロジェクト名(たとえば、「FileSelectionDialogSample」)を入力し、「次へ」ボタンを押します。


ビルドターゲットを一つチェックし(たとえば、「Android 2.1」をチェックし)、「次へ」ボタンを押します。


Package Name にパッケージ名(たとえば、「com.hiramine.fileselectiondialogsample」)を入力し、「完了」ボタンを押します。

ファイル情報クラスの追加

ListViewで表示するときの一要素にあたるファイル情報クラスを追加します。

パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージ(たとえば、「com.hiramine.fileselectiondialogsample」)を右クリックし、 右クリックメニューの「新規 > クラス」 を選択します。


名前 にクラス名(たとえば、「FileInfo」)を入力し、「完了」ボタンを押します。

FileInfoクラスの仕事は、
① ファイル・ディレクトリの表示名とFileオブジェクトの管理
② ソート用の比較関数の提供
です。

「① ファイル・ディレクトリの表示名とFileオブジェクトの管理」のために、メンバ変数、アクセサ関数を追加します。

「② ソート用の比較関数の提供」のために、Comparable<FileInfo> のインターフェースを実装します。
(クラス名の後ろに、implements Comparable<FileInfo> を追加し、インターフェースで宣言されている関数である compareTo関数を追加します。)

ファイル情報配列アダプタクラスの追加

ファイル選択ダイアログの実現方法としては、AlertDialog に ListView をViewとして登録する方法で実現します。
ListViewの表示要素を管理するファイル情報配列アダプタクラスを追加します。

パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージ(たとえば、「com.hiramine.fileselectiondialogsample」)を右クリックし、 右クリックメニューの「新規 > クラス」 を選択します。


名前 にクラス名(たとえば、「FileInfoArrayAdapter」)、
スーパークラス に、スーパークラス名(たとえば、「android.widget.ArrayAdapter<FileInfo>」)、
を入力し、「完了」ボタンを押します。

FileInfoArrayAdapterクラスの仕事は、
① ファイル情報リストの委譲、管理
② ListViewのリスト表示における一要素のビューの生成
です。

「① ファイル情報リストの委譲、管理」のために、メンバ変数、コンストラクタ、アクセサ関数を追加します。

「② ListViewのリスト表示における一要素分の表示行のビューの生成」のために、getView関数をオーバーライドし、処理を実装します。

ファイル選択ダイアログクラスの追加

ファイル選択ダイアログの作成と表示を行うファイル選択ダイアログクラスを追加します。

パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージ(たとえば、「com.hiramine.fileselectiondialogsample」)を右クリックし、 右クリックメニューの「新規 > クラス」 を選択します。


名前 にクラス名(たとえば、「FileSelectionDialog」)を入力し、「完了」ボタンを押します。

FileSelectionDialogクラスの仕事は、
① ダイアログの作成と表示
② ダイアログのListView内の項目をクリックしたときの処理
③ 選択したファイルの情報を呼び出し元に返すためのしくみの提供
です。

「① ダイアログの作成と表示」のために、showという関数を追加します。

「② ダイアログのListView内の項目をクリックしたときの処理」のために、android.widget.AdapterView.OnItemClickListener のインターフェースを実装します。
(クラス名の後ろに、implements OnItemClickListener を追加し、実装するインターフェースを指定します。指定したインターフェースで宣言されている関数である onItemClick関数を追加します。)

「③ 選択したファイルの情報を呼び出し元に返すためのしくみの提供」のために、リスナーインターフェースを追加し、onFileSelectという関数を宣言します。

メンバ変数、コンストラクタも追加します。

メインアクティビティクラスの実装

ファイル選択ダイアログに関する3つのクラスが出来たので、メインアクティビティに、ファイル選択ダイアログ呼び出しの処理を実装します。

メインアクティビティクラスの仕事は、
① スマートフォンのメニューボタンを押すと、画面下部に、「Select File...」 というメニュー項目が表示される。
② 「Select File..」というメニュー項目を選択すると、ファイル選択ダイアログが表示される。
③ ファイル名をクリックされた場合に、選択したファイルパス名をトーストにて表示する。
です。

「① スマートフォンのメニューボタンを押すと、画面下部に、「Select File...」 というメニュー項目が表示される。」のために、onCreateOptionsMenu関数をオーバーライドし、処理を実装します。

「② 「Select File..」というメニュー項目を選択すると、ファイル選択ダイアログが表示される。」のために、onOptionsItemSelected関数をオーバーライドし、処理を実装します。

「③ ファイル名をクリックされた場合に、選択したファイルパス名をトーストにて表示する。」のために、FileSelectionDialog.OnFileSelectListener のインターフェースを実装します。
(クラス名の後ろに、implements FileSelectionDialog.OnFileSelectListener を追加し、インターフェースで宣言されている関数である onFileSelect関数を追加します。)

メンバ変数も追加します。

実行

Android Virtual Device にて、動作確認。

起動直後


スマートフォンのメニューボタンを押すと、画面下部に、「Select File...」 というメニュー項目が表示されます。


「Select File..」というメニュー項目を選択すると、ファイル選択ダイアログが表示されます。


ディレクトリ名をクリックすると、一階層下のディレクトリ・ファイルのリストが表示されます。


ファイル名をクリックすると、ファイルパス名が、トーストで表示されます。

ダウンロード

サンプルプロジェクト

関連ページ

ファイル選択ダイアログ ( AlertDialog + ListView + 拡張子フィルタ )

ファイル選択ダイアログ ( AlertDialog + ListView + 拡張子フィルタ + 複数ファイル選択 )

ファイル選択アクティビティ ( Activity + ListView )

ファイル選択アクティビティ ( Activity + ListView + 拡張子フィルタ )

ファイル選択アクティビティ ( Activity + ListView + 拡張子フィルタ + 複数ファイル選択 )