Android Search Dialog软键盘打开时间过长

时间:2011-02-25 05:48:17

标签: java android

我正在尝试使用Android内置的Search Dialog,除非我尝试将其与ProgressDialog一起使用,否则它的工作正常。他的基本事件链是:

  1. 用户按搜索按钮,输入查询并提交。
  2. SearchManager调用搜索Activity的onCreate方法。
  3. 在onCreate方法中,我调用一个运行查询的AsyncTask,并在onPreExecute方法中显示ProgressDialog并将其隐藏在onPostExecute方法中。
  4. 这一切都很好,除非我提交查询后屏幕看起来像这样:

    enter image description here

    ......这很难看。我怎样才能防止这种情况发生?

    You can find the source code for the project at Google Code.

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并通过使用处理程序延迟进度对话框显示来“解决”它

在您的活动中,创建仅显示先前创建的进度对话框的处理程序:

private final Handler mHandler = new Handler() {

    @Override
    public void handleMessage(Message msg) {
        if (null != mProgress) {
            mProgress.show();
        }
    }
};

然后使用以下方法显示或隐藏它:

private void showWaitPopup(final boolean doShow) {
    if (doShow) {
        if (null == mProgress) {
            mProgress = new ProgressDialog(this);
            mProgress.setMessage(getString(R.string.searching));
            mProgress.setCancelable(false);

            // launch timer here
            mHandler.sendEmptyMessageDelayed(0, 100);
        }
    } else {
        if (null != mProgress) {
            mProgress.dismiss();
            mProgress = null;
        }
    }
}

答案 1 :(得分:1)

我在执行或取消搜索后隐藏键盘时遇到了类似的问题。问题是您无法获得对SearchManager的搜索对话框或编辑文本的引用(因此您通常的hideSoftInputFromWindow方法将无效。)如果您在设置中运行以下代码,它应该照顾您的问题:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchManager.setOnDismissListener(new OnDismissListener() {

    @Override
    public void onDismiss() {
        final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, 0);
    }
});

值得注意的是,在所有版本的Android上切换键盘可能都不是正确的选择。当os版本是Gingerbread或更早版本时,我只运行此代码。否则,我使用SearchView。

答案 2 :(得分:1)

我知道它已经晚了但它可能仍然有用。如果您使用无法访问其SearchManager的SearchDialog(例如Android 2),您可以使用以下内容关闭软键盘:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, 0);

或者如果您可以访问编辑文本(例如Android 4中的SearchView或任何EditText):

imm.hideSoftInputFromWindow(YOUR_EDIT_TEXT.getWindowToken(), 0);

答案 3 :(得分:0)

你试过下面的代码可能有帮助吗

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);