如何将ArrayList <coordinate []>从一个Activity传递给另一个</coordinate []>

时间:2011-07-28 17:06:04

标签: android android-activity arraylist android-intent

我整天都在努力做到这一点并没有任何运气。我有一个ArrayList,其中包含一个Coordinate类型数组,我想将它从一个活动传递到另一个活动。我不认为通过使用Intent可以实现这一点。所以我想知道我还有其他选择吗?我想要一些简单的东西..

4 个答案:

答案 0 :(得分:0)

您可以拥有一个单独的“Model”类,您可以在其中存储来自一个活动的ArrayList对象,并从另一个活动中检索它。

答案 1 :(得分:0)

创建Bundle并尝试放置ArrayList。然后在意图中发送包。

答案 2 :(得分:0)

您可以编写一个实现Parcelable的ParcelableCoordinate类,然后将Coordinate对象转换为ParcelableCoordinate对象,将它们放入intent中,然后在另一侧执行相反的操作。

答案 3 :(得分:0)

我可能会将值放在第一个活动的数据库中,并且只将一些唯一标识符传递给第二个活动,以便它可以在另一侧重新创建ArrayList。但是,如果您想要快速解决方案,请使用intent bundle并自行序列化/反序列化坐标:

ArrayList<Coordinate> mCoords = new ArrayList<Coordinate>();

private void startOtherActivity()
{
    int numCoords = mCoords.size();

    Intent intent = new Intent();
    intent.putExtra("coord_size", numCoords);
    for (int i = 0; i < numCoords; i++)
    {
        Coordinate coord = mCoords.get(i);
        intent.putExtra("coord_x_" + i, coord.getX());
        intent.putExtra("coord_y_" + i, coord.getY());
    }

    //start other activity...
}

然后从另一侧的bundle中获取值并重新生成ArrayList。

编辑:刚刚意识到你在谈论Coordinate []。同样的原则仍然适用,只需在那里嵌套另一个for循环并跟踪每个单独数组的长度。

更新:另一方面,你有类似

的东西
int len = intent.getIntegerExtra("coord_size", 0);
for(int i = 0; i < len; i++)
{
    float x = intent.getFloatExtra("coord_x_" + i, 0.0);
    float y = intent.getFloatExtra("coord_y_" + i, 0.0);
    mCoords.add(new Coordinate(x, y));
}