在运行方法之前等待Activity恢复

时间:2014-06-11 14:11:00

标签: android onactivityresult

我想在onActivityResult()方法中执行以下代码:

InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
InputMethodManager.showSoftInput(viewHolder.CertainEditTextView,InputMethodManager.SHOW_IMPLICIT);

此代码段应调出键盘,允许用户输入CertainEditTextView。

问题:它不起作用,我的理论是这是因为它在Activity完全加载之前运行。我认为这是因为如果我在一个单独的线程中运行此代码,在延迟1000毫秒后,它完美地工作。这为加载活动提供了时间。这不是一个真正的解决方案,我正在寻找一种方法来在Activity完成加载后立即运行它。 onResume()将是一个完美的方法,但我只想在调用onActivityResult后运行此代码片段。

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:3)

onResume 是我所说的完美方法,因为它是在onActivityResult调用之后调用的,你只需要设置一个标志如布尔值来知道是否你来自onActivityResult或生命周期的另一部分。

  

当您启动的活动退出时调用,为您提供requestCode,启动它,返回resultCode,以及来自它的任何其他数据。如果活动显式返回,则不会返回任何结果,或者在操作期间崩溃,resultCode将为RESULT_CANCELED。

     

当你的活动重新开始时,你会在onResume()之前立即收到这个电话。

Source

<强>更新

在提问者注意到此解决方案确实工作以满足其特定需求之后,您可以考虑在输入时使用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);
    }
}