繁体   English   中英

检查 onResume() 方法的原因

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM