ViewState overrides value from Model
vivchar opened this issue · 2 comments
vivchar commented
- create list with EditTexts
- create viewstate
- save value of edit text
- viewmodel of editText also has this value
5 open list
Result: empty value
Also I created InputFragment
to demonstrate this
renderer.performBindView(item, holder);
restoreViewState(holder);
//...
protected void restoreViewState(@NonNull final ViewHolder holder) {
if (holder.isSupportViewState()) {
final ViewState viewState = mViewStates.get(holder.getViewStateID());
final boolean hasSavedViewState = viewState != null;
if (hasSavedViewState) {
viewState.restore(holder);
} else {
clearViewState(holder);
if (hasChildren(holder)) {
getChildAdapter((CompositeViewHolder) holder).clearViewStates();
}
}
}
}
should be:
clearViewStateifNeed(holder); /* we should clear previous view state before bindView */
renderer.performBindView(item, holder);
restoreViewState(holder); /* we should restore view state after bindView */
//...
protected void clearViewStateifNeed(@NonNull final ViewHolder holder) {
if (holder.isSupportViewState()) {
final ViewState viewState = mViewStates.get(holder.getViewStateID());
final boolean hasSavedViewState = viewState != null;
if (!hasSavedViewState) {
clearViewState(holder);
if (hasChildren(holder)) {
getChildAdapter((CompositeViewHolder) holder).clearViewStates();
}
}
}
}
protected void restoreViewState(@NonNull final ViewHolder holder) {
if (holder.isSupportViewState()) {
final ViewState viewState = mViewStates.get(holder.getViewStateID());
final boolean hasSavedViewState = viewState != null;
if (hasSavedViewState) {
viewState.restore(holder);
}
}
}
vivchar commented
vivchar commented
will be released with v3.0.0