0

我正在使用 AsyncTask 类来搜索一个词,所以我想在执行过程时在列表中出现“搜索”这个词

好的,我想要做的是在搜索完成之前有一个不可点击的列表,为了,如果点击搜索词没有任何反应......

执行此操作的正确方法是什么?非常感谢!

4

4 回答 4

1

在加载、搜索和获取数据时,您可以在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()以隐藏您的消息。

于 2012-08-14T11:40:56.333 回答
1

我不知道任何直接的解决方案(必须有),但我这样做的方法是:

onPreExecute

  1. 制作您的ListView setEnabled(false)使其不可点击。
  2. 将自定义布局(包含搜索消息)的可见性设置为setVisibility(View.VISIBLE),以使其在ListView顶部可见。为此,您需要将ListView和自定义布局组合在FrameLayout.

onPostExecute

  • 更改ListView内容后,只需反转该过程

通过这种方式,您可以显示覆盖整个ListView的透明/半透明区域,并在其顶部或中心显示一条消息。

我在我的一个项目中使用了这种方法,它看起来非常好:)

于 2012-08-14T11:43:20.113 回答
0

当您使用AsyncTask时,您可以ProgressDialog在方法中使用带有“搜索”消息的 aonPreExecute并在完成后将其关闭(在 中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     
}
于 2012-08-14T11:39:26.163 回答
0

为什么不使用通知来显示查询正在执行?

因为即使您使用其他应用程序,它也可以确保搜索继续进行。

您提出的问题意味着您的应用程序的用户等待很长时间来搜索一个单词而什么都不做,这对于人类应用程序的设计来说是不可取的

于 2012-08-14T11:47:42.890 回答