在可序列化之后使用 onBackPressed() 发回列表
Posted
技术标签:
【中文标题】在可序列化之后使用 onBackPressed() 发回列表【英文标题】:Send back List with onBackPressed() after Serializable 【发布时间】:2017-09-10 02:00:35 【问题描述】:如何在活动 B 中的 onBackPressed() 操作后更新列表值,并将此更改保存在活动 A 中的列表中。
活动 A:
Intent order = new Intent(getApplicationContext(), OrderActivity.class);
Bundle args = new Bundle();
args.putSerializable("order", (Serializable) orderPositions);
order.putExtra("order", args);
startActivity(order);
活动 B:
@Override
public void onBackPressed()
new AlertDialog.Builder(this)
.setCancelable(false)
.setMessage("Are you sure you want to cancel?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
menuActivity.setOrderPositions(orderPositions);
finish();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
)
.setNegativeButton("No", null)
.show();
我在活动 A 中也有 List setter (menuActivity.setOrderPositions(orderPositions);) 但之后我有 null List。 有什么解决办法吗?
【问题讨论】:
【参考方案1】:在finish()
调用之前,您需要在第一个活动中startActivityForResult
和在第二个活动中setResult(Activity.RESULT_OK, <YOUR_LIST>)
。在第一个活动中获取onActivityResult
方法中的数据。
但我建议使用一些存储(例如,数据库)来存储您的数据并接受来自任何活动的数据。
或者您可以创建一些单例并将您的列表存储在实例中。
【讨论】:
【参考方案2】:调用 "adapter.notifyDataSetChanged();" 关于活动 A 的 onResume() 方法 注意:adapter 是我们为 listview 定义的 adpater 类。它将刷新列表视图。我在我的情况下使用它,它对我有用
【讨论】:
【参考方案3】:我已经制定了涉及重复位置计数和删除重复位置的方法。
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void checkForDuplicates(ArrayList<OrderSchema> orderPositions)
for(int i = 0; i < orderPositions.size(); i++)
for (int j = i+1; j < orderPositions.size(); j++)
if (Objects.equals(orderPositions.get(i).getPositionID(), orderPositions.get(j).getPositionID()) && (i != j))
Integer count = orderPositions.get(i).getCount();
count += 1;
orderPositions.get(i).setCount(count);
orderPositions.remove(j);
j = j -1;
【讨论】:
以上是关于在可序列化之后使用 onBackPressed() 发回列表的主要内容,如果未能解决你的问题,请参考以下文章
在可序列化的 C# 类上使用没有 XmlArray 的 XmlArrayItem 属性
浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题