2012-08-14 71 views
0

我使用的是的AsyncTask类搜索词,所以我希望出现的单词列表 “搜索”在执行proccess如何使列表不可点击?

好吧,我想要做的是有一个非可点击列表,直到搜索完成,为了,如果搜索单词被点击,什么也没有发生......

这是正确的方法吗? 非常感谢!

回答

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()隐藏你的消息。

0

当您使用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  
} 
1

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

onPreExecute

  1. 让您的ListViewsetEnabled(false)使它不能点击。
  2. 将您的自定义布局(包含搜索消息)的可见性设置为setVisibility(View.VISIBLE),以使其在您的ListView之上可见。为此,您需要将您的ListView和自定义布局合并为FrameLayout

onPostExecute

  • 简单地恢复过程中,你已经改变的ListView内容

通过这样做后,就可以显示一个透明/半透明区域覆盖整个ListView在其顶部或中间有消息。

我用在我的项目之一这种方法,它看起来非常不错,为什么不使用通知表明执行查询时:)

+0

谢谢,但setClickable(布尔)只是用户我需要:) – BamsBamx 2012-08-14 11:50:56

+0

没有probs。无论是这种方式还是那种方式,都必须继续编码:) – waqaslam 2012-08-14 11:58:20

0

因为它可以确保即使您到其他应用程序仍继续搜索。

你问的问题意味着您的应用程序等待很长的时间来搜索一个词,别的什么也不做,这是不可取的应用为人类设计