Как передать пользовательский класс между действиями - PullRequest
0 голосов
/ 19 июля 2011

Я нашел много простых решений для этого (например, Intent.putExtra (String, String) и Bundle.putString (String, String)), но это не полезно для моей ситуации.

У менякласс под названием MyMP3, который содержит не примитивные типы.Мне нужно передать следующее для MyMP3 ...

private AudioFile audioFile;
private Tag tag;
private int index;
private boolean saved, startedWithLyrics;
private String id3lyrics;

AudioFile и Tag - оба класса, которые я импортировал из файла .jar.Как я могу передать их в другое задание через Intents?Я попытался возиться с реализацией Parcelable для моего класса "MyMP3", но я не уверен, как правильно использовать эти методы, когда не передаются примитивные типы.подскажите, как правильно использовать Parcelable с пользовательским классом вроде моего?Как установить Parcel в функции writeToParcel и как правильно получить класс в другом Activity?

Ниже приведен мой код (по крайней мере, важная часть).Я уже несколько дней пробую разные вещи, но не могу заставить его работать.Пожалуйста, помогите мне!

public class MyMP3 extends AudioFile implements Parcelable
{
private AudioFile audioFile;
private Tag tag;
private int index;
private boolean saved, startedWithLyrics;
private String id3lyrics;

public MyMP3(File f, int index)
{
    this.audioFile = AudioFileIO.read(f);
    this.tag = this.audioFile.getTag();
    this.index = index;
    this.saved = false;
    this.id3lyrics = getLyrics();
}

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

@Override
public void writeToParcel(Parcel out, int flats)
{
    /* This method does not work, but I do not know how else to implement it */

    Object objects[] = {this.audioFile, this.tag, this.index, this.saved, this.startedWithLyrics, this.id3lyrics};
    out.writeArray(objects);
}

public static final Parcelable.Creator<MyMP3> CREATOR = new Parcelable.Creator<MyMP3>()
{
    public MyMP3 createFromParcel(Parcel in)
    {
        /* Taken from the Android Developer website */
        return new MyMP3(in);
    }

    public MyMP3[] newArray(int size)
    {
        /* Taken from the Android Developer website */
        return new MyMP3[size];
    }
};

private MyMP3(Parcel in)
{
        /* This method probable needs changed as well */
    Object objects[] = in.readArray(MyMP3.class.getClassLoader());
}

}

1 Ответ

1 голос
/ 19 июля 2011

Вы можете сделать свой класс MyMP3 Parcelable таким образом. Убедитесь в правильности порядка чтения / записи. Непримитивы также должны быть Parcelable, так что вы, к сожалению, не можете их контролировать. В качестве альтернативы, вы можете придумать свою собственную сериализацию / десериализацию. Вы можете использовать текстовый формат, например, JSON или XML. Другой альтернативой является использование подкласса Application (убедитесь, что вы объявили его в своем манифесте) и использование его в качестве места для подвешивания объектов, охватывающих Activity. Это сохраняет объект в памяти для жизненного цикла вашего приложения, поэтому будьте осторожны с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...