检查onResume()方法的原因

时间:2019-01-15 21:23:36

标签: java android android-studio

我需要检查onResume()是因为活动是第一次启动(第一种情况)还是因为我使用startActivityForResult之后的结果返回了(第二种情况)而被调用。.

我需要知道,因为如果是案例2,我需要滚动到一个特定的视图,如果是案例1,则需要正常启动活动。

那我应该使用的if条件是什么?

2 个答案:

答案 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()来执行逻辑,那将是最好的方法。