我想在onActivityResult()方法中执行以下代码:
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodManager.showSoftInput(viewHolder.CertainEditTextView,InputMethodManager.SHOW_IMPLICIT);
此代码段应调出键盘,允许用户输入CertainEditTextView。
问题:它不起作用,我的理论是这是因为它在Activity完全加载之前运行。我认为这是因为如果我在一个单独的线程中运行此代码,在延迟1000毫秒后,它完美地工作。这为加载活动提供了时间。这不是一个真正的解决方案,我正在寻找一种方法来在Activity完成加载后立即运行它。 onResume()将是一个完美的方法,但我只想在调用onActivityResult后运行此代码片段。
非常感谢所有帮助。
答案 0 :(得分:3)
onResume
是我所说的完美方法,因为它是在onActivityResult
调用之后调用的,你只需要设置一个标志如布尔值来知道是否你来自onActivityResult
或生命周期的另一部分。
当您启动的活动退出时调用,为您提供requestCode,启动它,返回resultCode,以及来自它的任何其他数据。如果活动显式返回,则不会返回任何结果,或者在操作期间崩溃,resultCode将为RESULT_CANCELED。
当你的活动重新开始时,你会在onResume()之前立即收到这个电话。
<强>更新强>
在提问者注意到此解决方案确实不工作以满足其特定需求之后,您可以考虑在输入时使用ViewTreeObserver
来获取通知,并且它应该可以正常工作。像这样:
...
View yourView = (LinearLayout)findViewById(R.id.YOUD VIEW ID);
ViewTreeObserver vto = yourView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
yourView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//We are now sure the view is drawn and should be able to do what you wanted:
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodManager.showSoftInput(viewHolder.CertainEditTextView,InputMethodManager.SHOW_IMPLICIT);
}
});
...
答案 1 :(得分:0)
做这样的事情(Pseudo)
private boolean SHOW_KEYBOARD = false;
onCreate(...){
}
:
:
:
:
.... onActivityResult ()
if(result == RESULT_OK && eqCode == myReqCode){
SHOW_KEYBOARD = true;
}
}
onResume(){
if(SHOW_KEYBOARD ){
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodManager.showSoftInput(viewHolder.CertainEditTextView,InputMethodManager.SHOW_IMPLICIT);
}
}