我需要检查onResume()是因为活动是第一次启动(第一种情况)还是因为我使用startActivityForResult之后的结果返回了(第二种情况)而被调用。.
我需要知道,因为如果是案例2,我需要滚动到一个特定的视图,如果是案例1,则需要正常启动活动。
那我应该使用的if条件是什么?
答案 0 :(得分:1)
如果您正在使用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
}
}
}
答案 1 :(得分:0)
@ rafsanahmad007的回答很好,但是如果您确实确实需要使用onResume()
,则有几种方法可以解决。
一种选择是在boolean
内设置onActivityResult()
标志,然后在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
参数是否为空。如果为null,则表示您是第一次启动。然后,您可以将其与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()
来执行逻辑,那将是最好的方法。