私はファイル選択ダイアログとして使用しているAlertDialogのインスタンスを持っています。これには階層ブラウジング機能が含まれています。ディレクトリがリストから選択されている場合は、そのディレクトリ内のファイルのリストが表示されます。また、前のフォルダに戻る「上のレベル」ボタンも含まれています。私はAlertDialogオブジェクトのビルトインListViewの内容を更新する方法が必要ですが、そのダイアログはダイアログオブジェクトをビルダーから再ロードせずに表示しています。私はアダプターが存在することを認識していますが、外部XMLリソースではなく、定義されたインスタンス変数からデータをロードする方法が必要です。ボタンの押下時にダイアログが閉じるのを避けるためにonResumeメソッドをオーバーライドしています。これがリスト更新を実行する必要がある場所です。実行中にAlertDialogのListViewの内容を更新する
これは、onResumeメソッドの中にある選択ボタンのOnClickリスナーのコードです。
alertDialog.getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if(position >= 0) { String[] list = getCurrentFileList(); if(list[position].equals(NO_ITEMS_TEXT)){ return; } // If the selected file is a directory, recursively update the file list and redisplay. if(getCurrentFileRefList()[position].isDirectory()){ src = getCurrentFileRefList()[position]; parseFileList(); //todo update ListView from loaded file list }else { // If the selected item is a file, give the value to the handler and dismiss the dialog. handler.handleEvent(DialogActionEventHandler.ResultID.SUBMITTED, getCurrentFileRefList()[position]); alertDialog.dismiss(); } } } });
parseFileList();
方法は、選択したソースファイルからのファイルの現在のリストを取得するために使用されます。
ご協力いただきありがとうございます。
ListViewのアダプタへの参照を取得し、notifyDatasetChangedメソッドを使用できるバリアントにキャストする必要があるため、配列の代わりにArrayAdapterを使用するために初期宣言コードを再設定する必要がありますAlertDialogのBuilderのリスト設定メソッドに与えられた値? –
@MichaelRunzler次のyourDialogInstance.getListView()。getAdapter()。notifyDataSetChanged()を使用することをお勧めしますか? –
ですが、.getListView()。getAdapter()を呼び出すと、notifyDataSetChanged()メソッドを持たないListAdapter型のオブジェクトが返されます。それはBasicAdapterのサブクラスのようですので、それをキャストしてnotifyDataSetChanged()を呼び出してみましたが、エラーは発生しませんが実際には何もしないようです。このメソッドを実行するには、カプセル化された型のListAdapterを生成するために元のアダプタがどのようなものであるのかを知る必要があります。私はまだそれを見つけることができませんでした... –