在Serializable之后使用onBackPressed()发送回List

时间:2017-04-13 20:05:50

标签: android android-intent arraylist bundle serializable

如何在活动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中列出了setter(menuActivity.setOrderPositions(orderPositions);),但之后我有了null List。 任何解决方案?

3 个答案:

答案 0 :(得分:1)

首次活动需要startActivityForResultsetResult(Activity.RESULT_OK, <YOUR_LIST>)之前需要finish()第二次活动。在第一个活动中,使用onActivityResult方法获取数据。

但我建议使用一些存储(例如,数据库)来存储您的数据并从任何活动接受它。

或者您可以创建一些单例并将列表存储在实例中。

答案 1 :(得分:1)

呼叫  “adapter.notifyDataSetChanged();” on活动A的onResume()方法 注意:adapter是我们为listview定义的adpater类。它会刷新列表视图。我在我的情况下使用它,它对我有用

答案 2 :(得分:0)

我制定了隐含重复位置数量并删除重复位置的方法。

@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;
            }
        }
    }
}