【问题标题】:Is it mandatory to go back to Activity A that calls startActivityForResult from Activity B?是否必须返回从活动 B 调用 startActivityForResult 的活动 A?
【发布时间】:2017-08-11 04:10:26
【问题描述】:

我有两个activities,我希望它们能够使用相同的数据但不同的views/layout 来回交互,并且我可以在两个活动中执行相同的操作。

有人建议我使用 startActivity 而不是 startActivityForResult,因为返回调用活动(活动 A)是可选的,但我不认为这是要走的路。

我看了又看,但一切都建议我使用startActivityForResult。如果可能,那么不返回调用活动将如何影响程序?请指教,谢谢。

【问题讨论】:

  • 不,如果您使用startActivityForResult(),则不必返回上一个活动,除非您想处理上一个活动(活动A)中的结果。
  • startActivityForResult 仅在您想要现有活动的 onActivityResult() 方法中的一些更新数据时有用。如果您不需要结果,那么您可以简单地使用 startActivity。如果您想实现其他目标,请解释您需要实现的实际行为。
  • @Avi,要交换的数据是一个 parcelables 列表,两个活动都可以更新两个活动的列表(编辑、删除、添加),我希望它始终保持同步。我认为 startActivityForResult 是要走的路,但事实上我的高级开发人员建议使用 startActivity,我不得不转向这里寻求建议
  • 数据列表是否不是从任何数据源(如 DB 或 API)获取的。当您更新列表时,它们不会反映在这些数据源中。
  • 您最好使用具有两个片段的单个活动,数据由活动保存。这样,您实际上将处理单个数据变量。

标签: android android-intent android-activity start-activity startactivityforresult


【解决方案1】:

不,这不是强制性的。 startActivitystartActivityForResult 的使用几乎相同,只是如果您将 startActivityForResultonActivityResult 一起使用,则您“可以”从 Activity B(新活动)中获取一些数据。

如果您使用sartActivityForResult,则可以放心地忽略结果 而且你真的不需要一些数据回来。

【讨论】:

    【解决方案2】:

    startActivityForResult() 在您想从现有活动的 onActivityResult() 方法中的第二个活动的结果中获取一些更新数据时很有用。如果您不需要结果,那么您可以简单地使用 startActivity()。如果您不想从第二个活动中进行任何更新,则可以简单地调用 startactivity() 或者如果您使用 startActivityForResult() 则可以忽略第二个活动中的意图数据onActivityResult()。您可以像这样实现 startActivityForResult()

    FirstActivity.java

    Intent i = new Intent(this, SecondActivity.class);
    startActivityForResult(i, 111);
    

    SecondActivity.java

    Intent returnIntent = new Intent();
    returnIntent.putExtra("result",result);
    setResult(Activity.RESULT_OK,returnIntent);
    finish();
    

    FirstActivity.java

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        if (requestCode == 111) {
            if(resultCode == Activity.RESULT_OK){
              // got result from second activity
                String result=data.getStringExtra("result");
            }
            if (resultCode == Activity.RESULT_CANCELED) {
                //Write your code if there's no result
            }
        }
    }//onActivityResult
    

    【讨论】:

    • 我使用 startActivityForResult 的问题是,在 onActivityResult 期间,它会出于某种原因再次调用 onCreate,这将清除我在回调期间收到的所有数据。不确定它是否应该表现得那样。
    • 你在用startActivityForResult做什么?
    • 我正在从两个活动中将一个项目添加到同一个列表中,并且需要在活动切换之间保留其值,直到某个操作
    • 您是否尝试在清单文件中添加<activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait" > </activity>
    • 呃,没有。在我的情况下会做什么?我实现了那些在方向改变期间而不是在活动改变期间保持状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多