2012-11-09 167 views
0

我会先开始说这句话,说我已经看到所有处理这个问题的其他文章,并尝试了所有这些文章。在使用parcelable的活动之间传递数组列表对象

我正在尝试做其他帖子中询问的同样的事情,即使用Intent将ArrayList的值从一个活动传递给另一个活动。

我觉得我已经正确实施了我的课程。下面是我使用的主类(Route_Class)。

public static final Parcelable.Creator<Route_Class> CREATOR = 
     new Parcelable.Creator<Route_Class>() 

public Route_Class createFromParcel(Parcel in) 
    { 
     System.out.println("in Parcel In"); 
     Route_Class route_class = new Route_Class(); 
     route_class.layout_width2 = in.readString(); 
     route_class.latitude = in.readDouble(); 
     route_class.longitude = in.readDouble(); 
     route_class.startingLat = in.readDouble(); 
     route_class.startingLong = in.readDouble(); 
     route_class.name = in.readString(); 
     route_class.routeName = in.readString(); 
     route_class.GeoPoints = in.readString(); 
     route_class.layout_width = in.readString(); 
     route_class.layout_height = in.readString(); 
     route_class.orientation = in.readString(); 
     route_class.xmlns = in.readString(); 
     route_class.id = in.readString(); 
     route_class.clickable = in.readInt() == 0; 
     route_class.enabled = in.readInt() == 0; 
     route_class.layout_height2 = in.readString(); 
     route_class.apiKey = in.readString();   

        Bundle b = in.readBundle(GeoPoints_Class.class.getClassLoader());   
     route_class.geoPoints_arraylist = b.getParcelableArrayList("_geoPoints_arraylist"); 

     return route_class; 
    } 


    @Override 
    public Route_Class[] newArray(int size) 
    { 
     return new Route_Class[size]; 
    } 
}; 

这里是在Route_Class用我的第二类(GeoPoints_Class)。

public static final Parcelable.Creator<GeoPoints_Class> CREATOR = 
     new Parcelable.Creator<GeoPoints_Class>() 
     { 
      public GeoPoints_Class createFromParcel(Parcel in) { 
       GeoPoints_Class geoPoints_class = new GeoPoints_Class(); 
       System.out.println("In Parcel In for GEoPoints"); 
       geoPoints_class.lat = in.readDouble(); 
       geoPoints_class.lon = in.readDouble(); 
       geoPoints_class.location = in.readString(); 

       return geoPoints_class; 

接下来就是我把一个对象..

Intent i = new Intent(getApplicationContext(), route.class); 

       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

       Bundle b = new Bundle(); 
       b.putParcelableArrayList("route_Classes_temp", route_Classes); 
       i.putExtra("selectiontemp",parent.getItemAtPosition(pos).toString()); 
       i.putExtras(b); 
       startActivityForResult(i, 100); 

最后,在这里我尝试获得对象...

Bundle b = this.getIntent().getExtras(); 

    route_Classes = b.getParcelableArrayList("route_Classes_temp"); 
    userMapSelection = b.getString("selectiontemp"); 

我我一直试图使用这个作为资源:http://androidideasblog.blogspot.com/2010/02/passing-list-of-objects-between.html但它似乎并不工作。运行应用程序时,我发现了以下错误(任何线索,坏的幻数引用):

11-09 14:48:52.951: E/Bundle(1128): readBundle: trace = java.lang.RuntimeException 
11-09 14:48:52.951: E/Bundle(1128): at android.os.Bundle.readFromParcelInner(Bundle.java:1580) 
11-09 14:48:52.951: E/Bundle(1128): at android.os.Bundle.<init>(Bundle.java:82) 
11-09 14:48:52.951: E/Bundle(1128): at android.os.Parcel.readBundle(Parcel.java:1381) 

提前感谢!

+0

您演示如何阅读可接受的包裹,但是如何编写它们? http://developer.android.com/reference/android/os/Parcelable.html – auselen

+0

请按照书写宗地的方式添加课程的全部代码也很重要。 –

+0

我贴[这里](http://stackoverflow.com/questions/13079143/passing-arraylist-object-between-activities-using-parcelable),并被告知我提供了太多。哈哈。任何帮助表示赞赏。 – kbarnes

回答

0

有一次,我尝试它,但没有奏效。所以你可以这样做:

你创建一个类并从Application类扩展它。你在这里定义列表为私人。并写getters setter方法。这个类保持数据直到应用程序打开。您可以在第一次活动中设置列表。而在第二活性阅读

你应该让样本这个类,在您的活动(例如您的应用程序的类名:应用程序):

App app = (App) getApplicationContext(); 

,你可以得到列表(例如您的列表名称应用程序类别:列表)

App app = (App) getApplicationContext(); 
app.getList(); 
相关问题