[英]Check reason for onResume() method
我需要检查 onResume() 是因为活动第一次启动(第一种情况)而被调用,还是因为使用 startActivityForResult 后的结果又回来了(第二种情况)而被调用。
我需要知道,因为如果案例是案例 2,我需要滚动到特定视图,如果案例是案例 1,我需要正常启动活动。
那么我应该使用的 if 条件是什么?
@rafsanahmad007 的回答很好,但如果您确实需要使用onResume()
,有几种方法可以解决它。
一种选择是在onActivityResult()
设置一个boolean
标志,然后在onResume()
检查它:
private boolean returningFromResult = false;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FOO) {
this.returningFromResult = true;
// ...
}
}
@Override
protected void onResume() {
super.onResume();
if (returningFromResult) {
// special case
} else {
// normal case
}
}
另一种选择是在onCreate()
内部检查savedInstanceState
参数是否为空。 如果它为空,则意味着您是第一次启动。 然后,您可以将其与onResume()
逻辑结合起来,以确定onResume()
是否已被多次调用:
private boolean isFirstOnResume;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.isFirstOnResume = (savedInstanceState == null);
// ...
}
@Override
protected void onResume() {
super.onResume();
if (isFirstOnResume) {
this.isFirstOnResume = false;
// normal case
} else {
// special case
}
}
尽管如此,如果您可以简单地使用onActivityResult()
来执行您的逻辑,那将是最好的方法。
如果您使用的是startActivityForResult()
则无需监听onResume()
调用。 它有一个回调方法,您可以根据自己的条件编写滚动代码。
例如:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1); //here 1 is the request code
在您的 SecondActivity 中设置要返回给 FirstActivity 的数据。 如果您不想返回,请不要设置任何内容。
例如:在 SecondActivity 中:
Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK,returnIntent);
finish();
现在在您的 FirstActivity 类中为 onActivityResult() 方法编写以下代码。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
//case 2
//Write your code
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.