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

解説

ファイル選択ダイアログ ( AlertDialog + ListView ) で作成したファイル選択ダイアログは、すべてのファイルが表示されていました。これに拡張子による表示フィルタの機能を追加します。

実現方法としては、ファイル選択ダイアログクラスのshow関数内での、ファイルリストの生成の処理に、拡張子による選り分けの処理を追加します。

実装

プロジェクトの作成

FileSelectionDialogExtFileterTest」という名のプロジェクトを作成し、ファイル選択ダイアログ ( AlertDialog + ListView ) と同内容のプログラムを実装します。

ファイル選択ダイアログクラスの修正

ファイル選択ダイアログクラスのshow関数内での、ファイルリストの生成の処理に、拡張子による選り分けの処理を追加します。

修正点としては、
・クラスメンバ変数に、フィルタ拡張子配列変数を追加。
・コンストラクタ引数として、フィルタ拡張子文字列を受け取れるように変更。
・コンストラクタ処理に、受け取ったファイル拡張子文字列を、トークン分割し、フィルタ拡張子配列にする処理を追加。
・show関数内の、File#listFiles関数の引数に、FileFilterオブジェクトの生成関数呼び出しを追加。
・show関数の下に、FileFilterオブジェクトの生成関数の定義を追加。



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。

メインアクティビティクラスの修正

ファイル選択ダイアログの修正にあわせて、メインアクティビティでの、ファイル選択ダイアログ呼び出しの処理を修正します。

onOptionsItemSelected関数内の、ファイル選択ダイアログクラスのインスタンスの生成処理の引数に、フィルタ拡張子文字列を追加します(たとえば、「"jpg; xml"」を追加します)。



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。

実行

Android端末にて、動作確認。

拡張子フィルタあり(フィルタ拡張子として「jpg; xml」を指定)の場合
(ディレクトリと、拡張子が、jpgもしくはxmlのファイルがリストされます)


拡張子フィルタなし(フィルタ拡張子として「""」を指定)の場合
(すべてのファイルがリストされます)

ダウンロード

テストプロジェクト
github.com上のリポジトリページ

関連ページ

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

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

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

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

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

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