【问题标题】:checking if mainActivity is called from another activity检查是否从另一个活动调用 mainActivity
【发布时间】:2014-06-26 18:21:28
【问题描述】:

在我的应用程序中,我从MainActivity 转到TrackingActivity,然后又回到MainActivity。在这最后一步中,我使用了一些 putExtra。这是我返回MainActivity的代码:

public void goToHomeWithData(){
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("avgSpeed", avgSpeed);
        intent.putExtra("totalDistance", totalDistance);
        intent.putExtra("altitude", altitude);
        intent.putExtra("totalTime", totalTime);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);
    }

MainActivityonResume() 方法中,我想用类似这样的方式检索这些数据:

String totalTime = getIntent().getExtras().getString("totalTime");
Double totalDistance = getIntent().getExtras().getDouble("totalDistance");
Double avgSpeed = getIntent().getExtras().getDouble("avgSpeed");
Double altitude = getIntent().getExtras().getDouble("altitude");

但由于在启动应用程序时也调用了onResume(),因此应用程序在getIntent().getExtras().getString("totalTime"); 部分崩溃,因为没有调用MainActivity 的Intent。

我正在寻找的是检查 getIntents 以查看是否从 TrackingActivity 调用了 MainActivity

提前谢谢你。

【问题讨论】:

    标签: android android-intent android-activity bundle


    【解决方案1】:

    你应该看看startActivityForResult;

    在活动 1 中

    protected void launchSecondActivity() {
            // TODO Auto-generated method stub
            Intent i = new Intent(this,SecondActivity.class);
    
            startActivityForResult(i, 0);
    
        }
    

    在第二个活动中使用 setResult 而不是启动第一个活动的新实例

     public void goToHomeWithData(){
            Intent intent = new Intent();
            intent.putExtra("avgSpeed", avgSpeed);
            intent.putExtra("totalDistance", totalDistance);
            intent.putExtra("altitude", altitude);
            intent.putExtra("totalTime", totalTime);
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            setResult(RESULT_OK,intent);
            finish();
        }
    

    然后在您的第一个 Activity 中,您可以像这样收听结果:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            super.onActivityResult(requestCode, resultCode, data);
    
            if (resultCode == RESULT_OK && data!=null) {
    
                if (data.getExtras().containsKey("SOMETAG") {
                    theExtraYouCareAbout = data.getStringExtra("SOMETAG");
    
                }
    }
    

    注意这是伪代码,但应该让你走上正确的道路

    【讨论】:

    • 不调用goToHomeWithData 中的finish() 是否可行?如果可能的话,我想保持活动开放。
    • 您可以摆脱 finish() 并改为使用 onBackPressed() (假设您没有在 onBackPressed() 中调用 finish() .. 现在通过将您的活动发送到背景没有完成它,不能确保它不会在垃圾收集过程中被操作系统杀死或丢失其状态.. 确保捆绑您的 savedInstance 状态
    • 为什么需要保持运行?
    • 因为整个应用程序只是两个活动:一个是 webview,第二个是谷歌地图。这应该不会太难处理,它会保存我的 googleMap 数据,包括折线和其他数据。 onBackPressed() 表示“按下后退按钮时”?我可以在我的代码中调用它吗?
    • 是的,它是一个公共方法,只需说'onBackPressed();'同样,如果您要让这些活动保持运行,请务必查看 savedInstanceStates 以防万一用户的设备需要释放内存developer.android.com/training/basics/activity-lifecycle/…
    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 2017-01-03
    • 2014-01-30
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多