AsyncTask クラスを使用して単語を検索しているので、プロセス実行中に「検索中」という単語をリストに表示したい
さて、私がやりたいのは、検索が完了するまでクリックできないリストを作成することです。検索する単語をクリックしても何も起こらないようにするためです...
これを行う正しい方法はどれですか? どうもありがとう!
データのロード、検索、および取得中に、ヘッダー ビューまたはフッター ビューを に表示できますListView
。アダプターを設定する前に、これらのビューを追加するだけです。単語を検索するときは、 を呼び出しsetClickable(false)
てListView
ヘッダー/フッター ビューを有効にします。たとえば、 を呼び出しaddFooterView(mFooterView)
てメッセージを表示します。
アダプターを設定する前に、ビューを追加する必要があることに注意してください。
例:
LayoutInflater inflater = getLayoutInflater();
mFooterView = inflater.inflate(R.layout.footer, null, false);
mListView.addFooterView(mFooterView);
mListView.setAdapter(mAdapter);
この後、addFooterView()
メッセージを表示するために電話をかけ、メッセージを非表示にするために電話removeFooterView()
してください。
直接的な解決策はわかりませんが(あるはずです)、これを行う私の方法は次のとおりです。
onPreExecute :
setEnabled(false)
setVisibility(View.VISIBLE)
の上に表示されるようにするには、カスタム レイアウト (検索メッセージを含む) の可視性を に設定します。そのためには、ListViewとカスタム レイアウトを.xml で組み合わせる必要があります。FrameLayout
onPostExecute :
このようにすることで、ListView全体を覆う透明/半透明の領域を表示し、その上または中央にメッセージを表示できます。
私は自分のプロジェクトの1つでこのアプローチを使用しましたが、かなり良さそうです:)
を使用しているので、メソッド内で「検索中」というメッセージとともにAsyncTask
を使用し、完了したらそれを閉じることができます ( 内)。ProgressDialog
onPreExecute
onPostExecute
このようにして、ListView も無効になります。
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = ProgressDialog.show(mContext, message, "Please wait...");
mProgressDialog.setCancelable(false);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if(mProgressDialog != null && mProgressDialog.isShowing())
mProgressDialog.dismiss();
// set data for listview
}
通知を使用して、クエリが実行中であることを示してみませんか?
他のアプリに出かけても検索を継続できるためです。
あなたが尋ねた質問は、あなたのアプリのユーザーが単語を検索するのに長時間待っていることを暗示しています。これは、人間向けのアプリの設計にとって望ましくありません