1

我想在 2 个片段之间传递数据。我传递的数据是 SongDetails 类的对象。这是传递数据的片段的代码

ArrayList<SongDetails> Songinfo =new........;
if (Songinfo.size()>0)//Songinfo is an object of the class SongDetails..

        {
         Bundle bundle = new Bundle();

         bundle.putParcelableArrayList("Fragdata",Songinfo);
         dv.setArguments(bundle);

        }

接收数据的代码

Bundle bundle=this.getArguments(); 
    final ArrayList<SongDetails> Songinfo =bundle.getParcelableArrayList("Fragdata"); 

当我运行它时,应用程序崩溃了......我做错了什么?

SongDetails 的代码

package sourcecode.jazzplayer;


import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;

public class SongDetails implements Parcelable {
    Bitmap icon;
    String song;
    String Artist;
    String Album;
    String Path;
    int time;
    int icLauncher;

    public SongDetails() {
    }

    public SongDetails(Parcel in) {
        String[] data = new String[4];
        in.readStringArray(data);
        this.Path = data[0];
        this.song= data[1];
        this.Album= data[2];
        this.Artist = data[3];
    }

    public String getSong() {
        return song;
    }

    public void setSong(String song) {
        this.song = song;
    }

    public String getArtist() {
        return Artist;
    }

    public void setArtist(String Artist) {
        this.Artist = Artist;
    }

    public Bitmap getIcon() {
        return icon;
    }

    public void setIcon(Bitmap bitmap) {
        this.icon = bitmap;
    }

    public String getPath2() {
        return Path;
    }

    public void setPath2(String Path) {
        this.Path = Path;
    }

    public String getAlbum() {
        return Album;
    }

    public void setAlbum(String Album) {
        this.Album = Album;
    }

    public void setIcon(int icLauncher) {
        this.icLauncher = icLauncher;
    }










    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeStringArray(new String[] { this.Path,this.song,this.Album,this.Artist });

    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public SongDetails createFromParcel(Parcel in) {
            return new SongDetails(in);
        }

        public SongDetails[] newArray(int size) {
            return new SongDetails[size];
        }
    };
}
4

2 回答 2

1

您不能直接在 2 个片段之间传递数据。相反,您必须通过您之前必须创建的接口将数据从片段 1 传递到您的活动。

然后,在您的活动中实现的方法中,您应该检索对片段 2 的对象引用并调用您创建的公共方法并完成这项工作。

Android官方文档中有一个很好的教程:

安卓片段

于 2013-08-24T22:43:41.610 回答
0

要将任何数据从任何地方路径到应用程序中的任何其他地方,请使用 EventBus 库。您也可以通过实现观察者设计模式来做到这一点,但使用库要容易得多,因为它还为您处理线程切换(以防万一您需要它)这里是链接 https://github.com/greenrobot/EventBus

于 2015-11-01T05:28:14.747 回答