键盘不弹出的奇葩解决办法

最近在做一个社交APP,其中有搜索功能。想想这能有什么难的呢?顶多有一个保存历史记录,键入关键词的时候,进行提示罢了。奇葩的问题就出现了,当一次出现搜索结果后,文本编辑框再次获取焦点,键盘怎么都不能弹出来。我仔细的观察了一下,有以下情况的时候,键盘还能弹出来:
1.拉下通知栏(即使不全部拉下来);
2.跳转到下一个页面,再返回;
应该是调用Activity的onPause,onResume等,对键盘产生了影响。接着搜索安卓中的键盘管理机制,未果。开始了下面的大胆尝试:
1.在用户点击文本编辑框的时候,自动调用Activity的生命周期:

SearchActivity.this.onPause();
SearchActivity.this.onStop();
SearchActivity.this.onRestart();
SearchActivity.this.onResume();
Intent intent = new Intent(SearchActivity.this,
SearchTempActivity.class);
startActivity(intent);

正当我为此自鸣得意的时候,问题出现了,有时候,第二次点击无效(是第二次有效后,其他基本没有问题),这样不行啊。
2.让搜索页面真的跳转到某个页面,然后返回,但是不让用户察觉(将下一个页面的可见性设置为不可见)。当用户返回后,进行键盘的弹出操作,就ok了。下面是相关代码:


        case R.id.et_search: {
            Intent intent = new Intent(SearchActivity.this,
                    SearchTempActivity.class);
            startActivity(intent);
        }
            break;

/** * 为了解决搜索页面,键盘不能够及时弹出的一个临时页面 * * @author Chuanhang.Gu * */

public class SearchTempActivity extends Activity {
    ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    //随便写一个布局文件即可,将可见性设置为gone 
    setContentView(R.layout.act_search_temp);
    }

    @Override
    protected void onResume() {
        super.onResume();
        this.finish();
    }

}
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 由于键盘弹出一次后,只有onStop之后才能继续出现(但是直接调用onStop不是太好使)
        //一个弹出键盘的方法(详情见下文)
        FileUtil.keyboardShow(SearchActivity.this, mSearchCondition);

    }
/** * * @param context * 可以传applicationContext * @param view * 正在取得输入焦点的View 一般为EditText; */
    public static void keyboardShow(Context context, View view) {
        inputMethodShow(context, view);
    }

    public static void inputMethodShow(Context context, View view) {
        view.requestFocus();
        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
    }

到此奇葩解决键盘不弹出问题结束。

你可能感兴趣的:(用户交互)