当我按下一次时,SearchView onQueryTextSubmit运行两次

fut*_*eer 12 multithreading searchview

我正在编写一个搜索函数来访问库网站.当提交查询字符​​串时,程序启动一个新线程来解析Web上的信息.它在AVD上正常运行,但我的HTC DesireHD反复显示搜索结果(如果实际结果是1. 2. 3.它看起来是1. 2. 3. 1. 2. 3.).我在onQueryTextSubmit方法中设置了断点,发现方法onQueryTextSubmit()中的代码被执行了两次.这是我的代码:

sv.setOnQueryTextListener(new OnQueryTextListener(){

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            list.clear();
            String str = null;
            try {//encoding Chinese character
                str = new String(query
                        .trim().getBytes(), "ISO-8859-1");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
            SearchPost sp = new SearchPost(SEARCH_URL + str);
            new Thread(sp).start(); 
            return false;
        }
    });

protected class SearchPost implements Runnable{
    public String url = "";
    SearchPost(String urls){
        url = urls;
    }
    public SearchPost() {
    }
    @Override
    public void run() {
        Message message = handler.obtainMessage();
        message.what = DOWNLOAD_COMPLETE;
        try{
            doc = Jsoup.connect(url).get();
                handler.sendMessage(message);
        }catch(IOException e){
            e.printStackTrace();
            message.what = DOWNLOAD_FAIL;
            handler.sendMessage(message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jab*_*MMM 28

清除对SearchView的关注帮助了我.

sv.clearFocus();

注意:这也隐藏了键盘.


Tar*_*rik 4

找出为什么单击按钮一次会导致 onQueryTextSubmit 触发两次本身就是一个问题,您可能无法解决,因为它是由可能有错误的操作系统控制的。真正的问题是如何正确处理快速连续单击按钮两次或多次的情况,这可能会产生相同的效果。我建议将 list.clear() 移动到填充列表的同一位置。