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

最近在做一个社交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);
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值