在Android屏幕上保存/恢复自定义ArrayList是否旋转?
我有一个自定义ArrayList的MovieItems,我想保存和恢复屏幕旋转。我检查了这个帖子 - How to save custom ArrayList on Android screen rotate? - 并且实现并修改了一些代码,但保存和恢复似乎不适合我。在Android屏幕上保存/恢复自定义ArrayList是否旋转?
1)保存该ArrayList:
public List<MovieItem> mItems = new ArrayList<>();
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList(MOVIE_KEY, (ArrayList<? extends Parcelable>) mItems);
super.onSaveInstanceState(outState);
}
2)恢复该ArrayList:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
{
mItems = savedInstanceState.getParcelableArrayList(MOVIE_KEY);
}
setRetainInstance(true);
......
}
3)使MovieItem类Parcelable:
public class MovieItem implements Parcelable{
private static final long serialVersionUID = 1L;
private String mCaption;
private String mId;
private String mUrl;
private String plot;
private Double rating;
private String release_date;
private boolean favourite;
public MovieItem() {
}
protected MovieItem(Parcel in) {
mCaption = in.readString();
mId = in.readString();
mUrl = in.readString();
plot = in.readString();
release_date = in.readString();
favourite = in.readByte() != 0;
mTitle = in.readString();
}
public static final Creator<MovieItem> CREATOR = new Creator<MovieItem>() {
@Override
public MovieItem createFromParcel(Parcel in) {
return new MovieItem(in);
}
@Override
public MovieItem[] newArray(int size) {
return new MovieItem[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(mCaption);
out.writeString(mId);
out.writeString(mUrl);
out.writeString(plot);
out.writeDouble(rating);
out.writeString(release_date);
}
在相关活动代码,您的清单中添加这一行,和活动将处理本身旋转
android:configChanges="screenSize|orientation|screenLayout"
测试也许帮助您
你节省了我的时间,mamnunam;) –
因为你有setRetainInstance(true)
,屏幕旋转时不会销毁/重新创建Fragment
。屏幕旋转后,Fragment
将调用onSaveInstanceState()
,但onCreate()
部分不会发生。
使用singletone对象来存储您的列表。 public enum MySingleton { INSTANCE; 私人MySingleton(){ System.out.println(“Here”); } private List mItems = new ArrayList <>(); public List getItems(){ return mItems; }}
和从任何地方MySingleton.INSTANCE.getItems()
什么是“不工作”?请解释你期望发生的事情,以及这与实际发生的事情有何不同。 –
当我关闭连接(飞行模式)并旋转屏幕时,我的电影海报列表应该被恢复。但他们没有恢复。但是我用下面的选定答案恢复了它。谢谢。 –
您在下面接受的答案不是一个很好的通用解决方案。您不应该处理配置更改,除非您完全知道您希望自己的应用不像正常响应配置更改的正常Android应用那样运行。 –