Android:如何创建一个实现Parcelable的类,该类包含一个非静态定制类的ArrayList
在我试图使parcelable的类中,有一个较小的类叫做genericSongClass。在较大的类中,有一个genericSongClass的ArrayList。所以我知道我必须使genericSongClass可打包,但如果不使该类保持静态,我就不能给它一个创建者。我有什么办法可以做到这一点吗 在当前的混乱中,我的小班同学:Android:如何创建一个实现Parcelable的类,该类包含一个非静态定制类的ArrayList,android,parcelable,Android,Parcelable,在我试图使parcelable的类中,有一个较小的类叫做genericSongClass。在较大的类中,有一个genericSongClass的ArrayList。所以我知道我必须使genericSongClass可打包,但如果不使该类保持静态,我就不能给它一个创建者。我有什么办法可以做到这一点吗 在当前的混乱中,我的小班同学: public class genericSongClass implements Parcelable { String songTitle = "";
public class genericSongClass implements Parcelable {
String songTitle = "";
String songArtist = "";
String songData = "";
String songAlbum = "";
String isChecked = "false";
public final static Parcelable.Creator<genericSongClass> CREATOR = new Parcelable.Creator<genericSongClass>() {
@Override
public genericSongClass createFromParcel(Parcel source) {
return null;
}
@Override
public genericSongClass[] newArray(int size) {
return null;
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
}
public类genericSongClass实现了Parcelable{
字符串songTitle=“”;
弦乐歌手=”;
字符串songData=“”;
弦乐专辑=”;
字符串isChecked=“false”;
public final static Parcelable.Creator=新的Parcelable.Creator(){
@凌驾
公共genericSongClass createFromParcel(地块源){
返回null;
}
@凌驾
公共genericSongClass[]新数组(整数大小){
返回null;
}
};
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效writeToParcel(Parcel dest,int标志){
}
}
我的大类(所有与parcelable相关的方法都在底部,使用parcel的ArrayList和构造函数在顶部):
公共类音乐实现可包裹{
私有静态ArrayList歌曲=null;
光标;
语境;
公共音乐(背景){
this.context=上下文;
}
公共音乐(包裹内){
songs=in.readArrayList(songs,genericSongClass.CREATOR);
}
public void BindAllSongs(){
/**定制拉丝*/
字符串选择=MediaStore.Audio.Media.IS_MUSIC+“!=0”;
最终字符串[]投影=新字符串[]{
MediaStore.Audio.Media.DISPLAY\u名称,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM};
最终字符串排序器=MediaStore.Audio.AudioColumns.TITLE
+“整理本地化ASC”;
试一试{
//要查询的表的uri
Uri Uri=android.provider.MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
//查询数据库
cursor=context.getContentResolver().query(uri,
投影、选择、空值、排序器);
如果(光标!=null){
songs=newarraylist(cursor.getCount());
cursor.moveToFirst();
而(!cursor.isAfterLast()){
genericSongClass GSC=新的genericSongClass();
GSC.songtTitle=cursor.getString(0);
GSC.songArtist=cursor.getString(1);
GSC.songData=cursor.getString(2);
GSC.songAlbum=cursor.getString(3);
歌曲添加(GSC);
cursor.moveToNext();
}
}
}捕获(例外情况除外){
}最后{
如果(光标!=null){
cursor.close();
}
}
}
公共静态对象[]toArray(ArrayList列表){
Object[]toReturn=新对象[list.size()];
对于(int i=0;i
这是我第一次尝试使用Parcelable,欢迎任何帮助!提前谢谢 < P> <强>第一:< /强>考虑以下java约定并重命名<代码> GANGEPONCHORKEYS/<代码> >代码> GANGIONGON</代码>。其余部分将假定您没有更改该名称 第二关:阅读这本关于使用/理解包裹的精彩指南 最后:精确代码的部分或全部解决方案: 在
genericSongClass
中添加新构造函数:
public genericSongClass(Parcel in) {
songTitle = in.readString();
// read in the rest of your values here
}
并添加默认构造函数:
public genericSongClass() {
}
in.readTypedList(songs, genericSongClass.CREATOR);
genericSongClass
中的CREATOR
应该如下所示:(同时调整Music
class)
记住,顺序很重要!读取和写入的顺序应该相同强>
在您的Mu中
public final static Parcelable.Creator<genericSongClass> CREATOR = new Parcelable.Creator<genericSongClass>() {
@Override
public genericSongClass createFromParcel(Parcel source) {
return new genericSongClass(source);
}
@Override
public genericSongClass[] newArray(int size) {
return new genericSongClass[size];
}
};
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(songTitle);
// write your other values here
}
in.readTypedList(songs, genericSongClass.CREATOR);
dest.writeTypedList(songs);