2016-06-22 3 views
0

RecyclerView画面の回転後にリロードしません。 ListAdapterから復元/復元する必要があることがわかりました。ではない ?onSaveInstanceStateにオブジェクトのリストを保存します。

しかし、問題がある:

Found java.util.List<Department> requried java.util.ArrayList<?extends android.os.Parcelable> 

私はバンドルにリストを配置しよう

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putParcelableArrayList("key", mAdapter.getList()); 
} 

mAdapter.getList()リターンRecyclerViewのアダプタからList<Department>

しかし、私はDepartmentモデルクラス内Parcelableを実施していた:

@Parcel 
public class Department implements UrlInterface,Parcelable { 

    @SerializedName("department_id") 
    @Expose 
    String departmentId; 
    @SerializedName("short_name") 
    @Expose 
    String shortName; 
    @Expose 
    String url; 
    @Expose 
    HashMap<Integer, Category> categories; 

    public Department() {} 

    protected Department(android.os.Parcel in) { 
     departmentId = in.readString(); 
     shortName = in.readString(); 
     url = in.readString(); 
    } 

    public static final Creator<Department> CREATOR = new Creator<Department>() { 
     @Override 
     public Department createFromParcel(android.os.Parcel in) { 
      return new Department(in); 
     } 

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

    public String getDepartmentId() { return departmentId; } 

    public void setDepartmentId(String departmentId) { this.departmentId = departmentId; } 

    public String getShortName() { return shortName; } 

    public void setShortName(String shortName) { this.shortName = shortName; } 

    @Override 
    public String getUrl() { return url; } 

    @Override 
    public String getFullName() { return shortName; } 

    public void setUrl(String url) { this.url = url; } 

    public HashMap<Integer, Category> getCategories() { return categories; } 

    @Override 
    public String toString() { return shortName; } 

    @Override 
    public String getImageUrl() { return null; } 

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

    @Override 
    public void writeToParcel(android.os.Parcel dest, int flags) { 
     dest.writeString(departmentId); 
     dest.writeString(shortName); 
     dest.writeString(url); 
    } 
} 

何が悪いのでしょうか?

答えて

6

ArrayListは.... ListからArrayListにキャスト、悪い考えListのサブクラスです...そしてそれは特にparcelable詰め込むと、問題を作成します。

ので、迅速な解決を行うことです。

outState.putParcelableArrayList("key", new ArrayList<Department>(mAdapter.getList()));

関連する問題