ファイル選択アクティビティ ( Activity + ListView )
(開発環境として「Eclipse」を使用した、古い情報です。
開発環境として「Android Studio」を使用した、新しい情報は、
「ホーム > プログラミング > Android プログラミング」からたどれます。)
解説
標準では、ファイル選択アクティビティに関する関数、クラスは用意されていないので、自作します。
実現方法としては、Activity に ListView を View として登録する方法で実現します。
ファイル選択アクティビティに関するクラスとしては、3つのクラスを作成します。
・ViewとしてListViewを登録ファイル選択アクティビティクラス
・ListViewの表示要素を管理するファイル情報配列アダプタクラス
・ListViewで表示するときの一要素にあたるファイル情報クラス
サンプルコード
サンプルアプリの仕様
- アプリを起動すると、メインアクティビティが表示される。
- スマートフォンのメニューボタンを押すと、画面下部に、「Select File...」 というメニュー項目が表示される。
- 「Select File..」というメニュー項目を選択すると、ファイル選択アクティビティが表示される。
- ファイル選択アクティビティには、ディレクトリ・ファイルのリストと、「Cancel」ボタンが表示される。
- ディレクトリ・ファイルのリストは、上の階層に戻る「..」、フォルダ、ファイルの順でリストされる。
- ディレクトリ名は名前の末尾に「/」が付く。
- ディレクトリ名をクリックすると、一階層下のディレクトリ・ファイルのリストが表示される。
- ファイル名をクリックすると、ファイル選択アクティビティは閉じられ、選択したファイルパス名をトーストにて表示する。
- 「Cancel」ボタンを押すと、ファイル選択アクティビティは閉じられる。
プロジェクトの作成
(開発環境としては、Pleiades Version 3.7.2 ( Eclipse Version 3.7.2 ) を使用しています)
(この設定でプロジェクトを作成しなければいけない、というわけではありません。)
Eclipseを起動します。
メニュー 「ファイル > 新規 > プロジェクト」 を選択します。
Android プロジェクトを選択し、「次へ」ボタンを押します。
Project Name にプロジェクト名(たとえば、「FileSelectionActivitySample」)を入力し、「次へ」ボタンを押します。
ビルドターゲットを一つチェックし(たとえば、「Android 2.1」をチェックし)、「次へ」ボタンを押します。
Package Name にパッケージ名(たとえば、「com.hiramine.fileselectionactivitysample」)を入力し、「完了」ボタンを押します。
ファイル情報クラスの追加
ListViewで表示するときの一要素にあたるファイル情報クラスを追加します。
パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージ(たとえば、「com.hiramine.fileselectionactivitysample」)を右クリックし、
右クリックメニューの「新規 > クラス」 を選択します。
名前 にクラス名(たとえば、「FileInfo」)を入力し、「完了」ボタンを押します。
FileInfoクラスの仕事は、
① ファイル・ディレクトリの表示名とFileオブジェクトの管理
② ソート用の比較関数の提供
です。
「① ファイル・ディレクトリの表示名とFileオブジェクトの管理」のために、メンバ変数、アクセサ関数を追加します。
「② ソート用の比較関数の提供」のために、Comparable<FileInfo> のインターフェースを実装します。
(クラス名の後ろに、implements Comparable<FileInfo> を追加し、インターフェースで宣言されている関数である
compareTo関数を追加します。)
ファイル情報配列アダプタクラスの追加
ファイル選択アクティビティの実現方法としては、Activity に ListView をViewとして登録する方法で実現します。
ListViewの表示要素を管理するファイル情報配列アダプタクラスを追加します。
パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージ(たとえば、「com.hiramine.fileselectionactivitysample」)を右クリックし、
右クリックメニューの「新規 > クラス」 を選択します。
名前 にクラス名(たとえば、「FileInfoArrayAdapter」)、
スーパークラス に、スーパークラス名(たとえば、「android.widget.ArrayAdapter<FileInfo>」)、
を入力し、「完了」ボタンを押します。
FileInfoArrayAdapterクラスの仕事は、
① ファイル情報リストの委譲、管理
② ListViewのリスト表示における一要素のビューの生成
です。
「① ファイル情報リストの委譲、管理」のために、メンバ変数、コンストラクタ、アクセサ関数を追加します。
「② ListViewのリスト表示における一要素分の表示行のビューの生成」のために、getView関数をオーバーライドし、処理を実装します。
ファイル選択アクティビティクラスの追加
ファイル選択アクティビティの作成と表示を行うファイル選択アクティビティクラスを追加します。
パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージ(たとえば、「com.hiramine.fileselectionactivitysample」)を右クリックし、
右クリックメニューの「新規 > クラス」 を選択します。
名前 にクラス名(たとえば、「FileSelectionActivity」)、
スーパークラス に、android.app.Activity、
を入力し、「完了」ボタンを押します。
FileSelectionActivityクラスの仕事は、
① アクティビティの作成
② アクティビティのListView内の項目をクリックしたときの処理
③ アクティビティのCancelボタンをクリックしたときの処理
④ アクティビティ呼び出し元との情報のやりとりのためのインテントに関する処理
です。
「① アクティビティの作成」のために、onCreate関数と、fillという関数を追加します。
「② アクティビティのListView内の項目をクリックしたときの処理」のために、android.widget.AdapterView.OnItemClickListener
のインターフェースを実装します。
(クラス名の後ろに、implements OnItemClickListener を追加し、インターフェースで宣言されている関数である onItemClick関数を追加します。)
「③ アクティビティのCancelボタンをクリックしたときの処理」のために、android.view.View.OnClickListener
のインターフェースを実装します。
(クラス名の後ろの、implements OnItemClickListener の後ろに、 OnClickListener を追加し、インターフェースで宣言されている関数である
onClick関数を追加します。)
「④ アクティビティ呼び出し元との情報のやりとりのためのインテントに関する処理」のために、onCreate関数に、呼び出し元からのパラメータ取得処理、onItemClick関数に、呼び出し元へのパラメータ設定処理、を追加します。
メンバ変数、コンストラクタも追加します。
メインアクティビティクラスの実装
ファイル選択アクティビティに関する3つのクラスが出来たので、メインアクティビティに、ファイル選択アクティビティ呼び出しの処理を実装します。
メインアクティビティクラスの仕事は、
① スマートフォンのメニューボタンを押すと、画面下部に、「Select File...」 というメニュー項目が表示される。
② 「Select File..」というメニュー項目を選択すると、ファイル選択アクティビティが表示される。
③ ファイル名をクリックされた場合に、選択したファイルパス名をトーストにて表示する。
です。
「① スマートフォンのメニューボタンを押すと、画面下部に、「Select File...」 というメニュー項目が表示される。」のために、onCreateOptionsMenu関数をオーバーライドし、処理を実装します。
「② 「Select File..」というメニュー項目を選択すると、ファイル選択アクティビティが表示される。」のために、onOptionsItemSelected関数をオーバーライドし、処理を実装します。
「③ ファイル名をクリックされた場合に、選択したファイルパス名をトーストにて表示する。」のために、onFileSelect関数を追加します。
メンバ変数も追加します。
AndroidManifest.xml へのファイル選択アクティビティの追加
サンプルアプリでは、メインとなる「FileSelectionActivitySampleActivity」の他に、ファイル選択アクティビティである「FileSelectionActivity」を使用します。
「FileSelectionActivity」を使用するためには、AndroidManifest.xml に、「FileSelectionActivity」に関する記述を追加する必要があります。
具体的には、AndroidManifest.xml に
<activity android:name="FileSelectionActivity"></activity>
という記述を、直接追記、もしくは、GUI操作で追記します。
(上記追記を実施したところ、「targetSdkVersionに関する記述をすべき」という旨の警告が出たので、
<uses-sdk android:minSdkVersion="7"/>
を
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"
/>
と書き換えました。)
実行
Android Virtual Device にて、動作確認。
起動直後
スマートフォンのメニューボタンを押すと、画面下部に、「Select File...」 というメニュー項目が表示されます。
「Select File..」というメニュー項目を選択すると、ファイル選択アクティビティが表示されます。
ディレクトリ名をクリックすると、一階層下のディレクトリ・ファイルのリストが表示されます。
ファイル名をクリックすると、ファイルパス名が、トーストで表示されます。
ダウンロード
関連ページ
ファイル選択ダイアログ ( AlertDialog + ListView )
ファイル選択ダイアログ ( AlertDialog + ListView + 拡張子フィルタ )
ファイル選択ダイアログ ( AlertDialog + ListView + 拡張子フィルタ + 複数ファイル選択 )
ファイル選択アクティビティ ( Activity + ListView + 拡張子フィルタ )
ファイル選択アクティビティ ( Activity + ListView + 拡張子フィルタ + 複数ファイル選択 )