保存对象并将其从列表视图中的选中项目传递给另一个活动

时间:2018-11-29 15:52:35

标签: java android listview baseadapter

大家好,我一直在努力3天,以找到解决方案,有人可以指出我正确的方向吗?我的问题如下:

我所拥有的: 1.通过“销售”类型的对象填充的listView 2.用一个复选框和2个带有名称和电子邮件的字符串构造一个单行。 3.我从BaseAdapter扩展

我需要什么: -当用户按下名为“下一个”(导致进行新活动)的按钮时,所有选中的对象必须保持选中状态,只有那些对象在下一个活动中可见。

我不是在谈论传递原始数据类型,而是在传递和维护对另一个活动列表中所有选定(选中)的对象的引用

我尝试过的事情 -我创建了一个静态ArrayList,并在用户选中一个框时尝试将所有选定的对象保存在复选框的侦听器中。我将此对象添加到我的静态数组中,但无法正常工作,当我尝试读取它时会给出一个NULL数组从另一个活动返回。

  • 我试图通过SharedPreferences保存它,但是它只保存数组的最后一个索引。

我的简短而通用的问题是:¿我打算在哪里保存复选框侦听器中的选定对象,或者如何仅维护在另一个活动中选定的对象?

这是我的checkBoxListener不确定如何保存所选对象

chkBoxUser.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                if (chkBoxUser.isChecked())
                {
                     //saveData(obj, obj.saleId);

                    ArrayList<SaleModel> saleSelected = new ArrayList<>();
                    saleSelected.add(obj);

                    Toast.makeText(context, "Object added!: " + saleSelected.get(0), Toast.LENGTH_SHORT).show();

                }
                else
                {
                    saleSelected.remove(obj);
                    Toast.makeText(context, "UNChecked: " + obj.customerFirstName, Toast.LENGTH_SHORT).show();
                }

            }
        });

1 个答案:

答案 0 :(得分:0)

您的数据很简单。您不需要传递对象。相反,您可以将每个对象另存为JSONObject。每个选中的项目,都将其保存到JSONArray。

现在,使用具有字符串参数的意图调用下一个活动。 string参数应包含JSONArray的字符串表示形式。

在您的下一个活动中,通过解析字符串参数并将其放回JSONArray对象,进行相反的操作。最后,重新创建您的初始对象。

如果您需要代码,请告诉我。