java - 当我完成结果的 Activity 时调用 OnCreate 和 onActivityResult

标签 java android appcompatactivity

我有 Activity A。它显示通过在 onCreate 中调用 void loadData() 从服务器检索的一些数据。

用户单击一个按钮,为结果打开一个新的 Activity B。完成后返回 Activty A。onActivtyresult 应该调用 loadData() 以重新加载数据。

当 Activty B 完成时,作为 A 调用的 onCreate 和 onActivityResult 都被销毁。这对我来说不好。

问题是:

  • Dose Activity A 总是会被销毁并调用 onCreate 吗?这是否记录在案,因为我找不到任何关于此的信息。如果是这种情况,那么我将仅在 onCreate 中调用 loadData。

    如果不是,我也必须从 onActivityResult 调用 loadData,这在某些情况下再次导致调用 loadData 2 次,这是我不想要的。

    A 类:

        public void onCreate(@Nullable Bundle bundle) {
              .... creation code
              loadData(); // will be called first time activity created as well when back from the activity B
        }
    
        public void createNew() {
             Intent createService =  new Intent(this,CreateService.class);
            startActivityForResult(createService, 1001);
            overridePendingTransition(R.anim.out_top,R.anim.fp);
        } 
    
        public void onActivityResult(int i, int i2, Intent intent) {
            super.onActivityResult(i, i2, intent);
            if (i2 != -1) {
                loadData(); ///will be called when back from Activty B
              }
        }
    

    B 类:

        public void on taskFinish() {
            setResult(1);
            finish();
            overridePendingTransition(R.anim.s_right, R.anim.s_in_right);
        } 
    

最佳答案

我已经有了这样的解决方法

     boolean loaded = false;
     void onCreate() {
        loadData();
        loaded=true;
     }

    public void createNew() {
        loaded = false;  /// Set before start the new Activity
        Intent createService =  new Intent(this,CreateService.class);
        startActivityForResult(createService, 1001);
        overridePendingTransition(R.anim.out_top,R.anim.fp);
     } 

     public void onActivityResult(int i, int i2, Intent intent) {
        super.onActivityResult(i, i2, intent);
        if (i2 != -1) {
           if (!loaded) {
             loadData();
             loaded = true;
          }
       }
     }

我有2个扫描

1- Activity 创建形式 scrach- loadData 将在 OnCrate() 中调用一次

2- 为结果启动新 Activity - 设置 loaded = false

a- 返回结果后,如果 Activity 被销毁,则在 onCreate 中加载 == true 并且 loadData 将被调用一次。然后将调用 onActivityResult 但不会调用 loadData。

b- 返回结果后如果 Activity 没有被销毁然后 loaded = false 和 将调用 loadData

关于java - 当我完成结果的 Activity 时调用 OnCreate 和 onActivityResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59434982/

相关文章:

java - Hibernate无法正确操作多个包

方法中的 Java 数组

android - 动画搜索栏进度

android - 如何通过此 Activity 修复此错误 : You need to use a Theme. AppCompat 主题(或后代)

android - AppCompatActivity 中的 onlistitemclick

java - 如何使用具有不同参数的 CrudRepository?

java - 如何在 Oracle JDBC 的存储过程中使用定义的 IN OUT CLOB 参数?

java - Android - 两项 Activity 无法从九项 Activity 中获取附加 bundle

java - RecyclerView 不显示 - Android

android - '错误 : Failed to resolve: com. android.support :appcompat-v7:29. 0.1'