Android序列化/对象传递和返回

D.R*_*.R. 4 serialization android android-activity

所以我有一个管理工作人员的应用程序.在应用程序的一个部分中,我有一个从Web服务检索到的工作程序列表.然后,用户从列表中选择一个工作器,列表将启动一个新活动(将Workorder对象传递给它),显示工作订单详细信息.用户可以在此期间编辑部分工作订单.如果用户返回列表(通过后退按钮),我需要将修改后的工作单BACK传递给工作单列表,并使用新修改的对象更新或替换旧对象.否则,(当前正在发生)用户编辑工作订单,但如果他们返回列表并再次选择相同的工作订单,则工作订单详细信息activty将显示所有旧数据.做这个的最好方式是什么.目前我有Workorder类实现Serializable,因此可以将workorder对象传递给连续的活动.

这样可行:列表 - >工作订单A.

但这就是我遇到问题的地方:List < - Workorder A(已修改)

我不确定我是否应该使用startActivtyForResult并传回工作订单对象.我知道这是可能的,但我不确定是否有更优雅的方法来做到这一点.感谢您提供的任何帮助,非常感谢!

Ale*_*lex 10

如果您的Workorder对象已经存在Serializable,则可以轻松地在Bundleintent中传递对象.要将对象保存到意图,您将执行以下操作:

intent.putExtra("SomeUniqueKey", [intance of workorder]);
Run Code Online (Sandbox Code Playgroud)

并加载另一个活动:

Workorder workorder = (Workorder) intent.getSerializableExtra("SomeUniqueKey");
Run Code Online (Sandbox Code Playgroud)

如果您正在使用startActivityForResult它将如此:

WorkorderListActivity.java:

Intent intent = new Intent(this, WorkorderDetailsActivity.class);
intent.putExtra("SomeUniqueKey", _workorder);
startActivityForResult(intent, [UniqueNumber]);

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
     if (requestCode == [UniqueNumber])
     {
         if (resultCode == RESULT_OK)
         {
             Workorder workorder = (Workorder) intent.getSerializableExtra("SomeUniqueKey");
             // Do whatever with the updated object
         }
     }
 }
Run Code Online (Sandbox Code Playgroud)

WorkorderDetailsActivity.java:

public void onCreate(Bundle savedInstanceState)
{
     Bundle bundle = getIntent().getExtras();
     _workorder = (Workorder) bundle.getSerializable("SomeUniqueKey");
     // Display the object
}

public void onBackPressed()
{
    // Update _workorder object
    Intent intent = getIntent();
    intent.putExtra("SomeUniqueKey", _workorder);
    setResult(RESULT_OK, intent);
}
Run Code Online (Sandbox Code Playgroud)

我相信这应该有效.