在活动之间传递参数的最佳方法是使用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;
}
答案 0 :(得分:2)
如果要传递不可包裹的物体,怎么办?
使用ViewModel:https://developer.android.com/topic/libraries/architecture/viewmodel
对于共享原始数据,请使用shared-preference;对于复杂数据/非不可打包的数据,请使用ViewModel。
扩展ViewModel类有很多好处:
答案 1 :(得分:1)
使用静态对象不是可取的。您可以将数据保存为共享首选项,然后在其他活动中进行检索。
答案 2 :(得分:0)
@ANMOL SRIVASTAVA 很抱歉与您矛盾,但是此活动目前无法实现。
您所说的恰好在片段中,因为viewmodel实例将链接到上下文。 如果我们从活动实例A中插入ViewModel,除非我使用创建单个实例副本的工厂,否则活动B中将没有相同的数据。探棒也在下面。如何管理ViewModel的oncleared?
这是一个好问题。因此,我建议您仅在活动及其片段之间使用ViewModel。因此,一个活动可以拥有由父活动实例的N视图模型链接的N个片段。要在活动之间传递数据,请在对象保存在数据库中的情况下传递ID,然后从ViewModel中检索它。如果未将其保存在数据库中,请将一个临时对象保存在某个位置,但不要保存在共享位置!会减慢用户界面