2016-06-22 2 views
0

Я не хочу перезагружать RecyclerView после поворота экрана. Я обнаружил, что мне нужно сохранить/восстановить List от Adapter. Не так ли?Сохранить список объектов в 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() возвращают List<Department> от адаптера RecyclerView.

Но я осуществил Parcelable внутри Department класса модели:

@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, литье из List в ArrayList .... плохая идея ... и это будет создавать проблемы, особенно с parcelable питания.

Так быстрое решение сделать:

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

Смежные вопросы