最佳实践?活动之间传递参数

时间:2018-08-29 09:11:26

标签: android android-activity parameter-passing

在活动之间传递参数的最佳方法是使用putExtra()方法。 putParcelable()可以传递对象。但并非所有物体都是可包裹的。如果要传递不可包裹的物体,怎么办?

我已经通过在目标活动中创建一个静态对象变量并将其填充到调用活动中来解决了这个问题。这是一个好可能性还是我不应该这样做。如果是,为什么?这会引起任何问题吗?

示例:

MainActivity

class FirstActivity extends AppCompatActivity {

  MyOwnNotParcelableObject mObject;

  public void openNextActivity() {
    final Intent intent = new Intent(this, SecondActivity.class);
    SecondActivity.mObject = mObject;  //<--Fills the static variable
    startActivity(intent);
  }
}

SecondActivity

class SecondActivity extends AppCompatActivity {

  static MyOwnNotParcelableObject mObject;

}

3 个答案:

答案 0 :(得分:2)

  

如果要传递不可包裹的物体,怎么办?

使用ViewModel:https://developer.android.com/topic/libraries/architecture/viewmodel

对于共享原始数据,请使用shared-preference;对于复杂数据/非不可打包的数据,请使用ViewModel。

扩展ViewModel类有很多好处:

  • 您无需担心UI数据持有者的生命周期。 ViewModel将由工厂自动创建,您无需自行创建和销毁
  • 数据将始终更新—电话后您将获得相同的数据 旋转。有了这个,您不需要通过 手动将数据记录到新活动或再次调用 数据库。一切都为您完成!
  • 数据将等您。如果您要进行API调用,请旋转手机,并在重新创建活动之前将结果发送出去,并确保将数据存储在ViewModel中,并且可以在重新创建活动后立即获取

答案 1 :(得分:1)

使用静态对象不是可取的。您可以将数据保存为共享首选项,然后在其他活动中进行检索。

答案 2 :(得分:0)

@ANMOL SRIVASTAVA 很抱歉与您矛盾,但是此活动目前无法实现。

您所说的恰好在片段中,因为viewmodel实例将链接到上下文。 如果我们从活动实例A中插入ViewModel,除非我使用创建单个实例副本的工厂,否则活动B中将没有相同的数据。探棒也在下面。如何管理ViewModel的oncleared?

这是一个好问题。因此,我建议您仅在活动及其片段之间使用ViewModel。因此,一个活动可以拥有由父活动实例的N视图模型链接的N个片段。要在活动之间传递数据,请在对象保存在数据库中的情况下传递ID,然后从ViewModel中检索它。如果未将其保存在数据库中,请将一个临时对象保存在某个位置,但不要保存在共享位置!会减慢用户界面