当我将一些数据添加到“列表模型”中并且在旋转设备上恢复保存的数据时,此代码工作正常,不幸的是,在恢复数据并将其设置为在OnRestoreInstanceState方法之后建模,在添加其他数据后,适配器无法使用新添加的数据刷新,适配器中的数据源可以更新,但适配器可以;不知道他们,我使用MVVM数据模型绑定和搜索更多的时间关于这个问题我无法解决.
Rhat有一个简单的提示,再次旋转设备后,我的适配器可以刷新所有添加的数据,哪个适配器不刷新它们.
public class ActivityRegister extends BaseActivities{ private List<RobotViewModel> model = new ArrayList<>(); ... @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... } @Override protected void onSaveInstanceState(Bundle outState) { outState.putParcelable("model",Parcels.wrap(model)); super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle outState) { model = Parcels.unwrap(outState.getParcelable("model")); adapter.setData(model); adapter.notifyItemInserted(model.size() - 1); binding.registerRobot.scrollToPosition(adapter.getItemCount() - 1); }
添加到模型方法:
@Override public void clickOnSendCommandToRobot() { RobotViewModel temp = new RobotViewModel(); temp.setMessage("message"); temp.setCommand(true); model.add(temp); adapter.notifyItemInserted(model.size() - 1); binding.registerRobot.scrollToPosition(adapter.getItemCount() - 1); }
我的适配器类:
public class RobotMessagesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private List<RobotViewModel> list; private LayoutInflater inflater; public RobotMessagesAdapter(List<RobotViewModel> robotViewModels) { this.list = robotViewModels; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { if (inflater == null) { inflater = LayoutInflater.from(parent.getContext()); } if (viewType == SV.RobotMessageType.SENT_BY_USER.ordinal()) { return new UserViewHolder(UserMessagesDataBinding.inflate(inflater,parent,false)); } else { return new RobotViewHolder(RobotDataBinding.inflate(inflater,false)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder,int position) { switch (getItemViewType(position)) { case 0: ((UserViewHolder) holder).bind(list.get(position)); break; case 1: ((RobotViewHolder) holder).bind(list.get(position)); break; } } ... public void setData(List<RobotViewModel> data) { Log.e("data size ",data.size() + ""); list.clear(); list.addAll(data); } }
我想知道为什么这段代码工作正常:
@Override protected void onRestoreInstanceState(Bundle outState) { model = Parcels.unwrap(outState.getParcelable("model")); adapter.setData(model); adapter.notifyItemInserted(model.size() - 1); binding.registerRobot.scrollToPosition(adapter.getItemCount() - 1); RobotViewModel temp = new RobotViewModel(); temp.setMessage("message"); temp.setCommand(true); model.add(temp); adapter.notifyItemInserted(model.size() - 1); binding.registerRobot.scrollToPosition(adapter.getItemCount() - 1); }
没有任何问题,后移动这行:
RobotViewModel temp = new RobotViewModel(); temp.setMessage("message"); temp.setCommand(true); model.add(temp); adapter.notifyItemInserted(model.size() - 1); binding.registerRobot.scrollToPosition(adapter.getItemCount() - 1);
到其他不起作用的方法:|
我的主持人:
public class ActivityRegisterPresenter { private ActivityRegisterContract view; public ActivityRegisterPresenter(ActivityRegisterContract mView) { view = mView; } ... }
和我的ViewModel:
public class ActivityRegisterViewModel extends BaseObservable { private String readContactPermission; private String getMessages; public ActivityRegisterViewModel() { } @Bindable public String getReadContactPermission() { return readContactPermission; } public void setReadContactPermission(String readContactPermission) { this.readContactPermission = readContactPermission; notifyChange(); } public String getGetMessages() { return getMessages; } public void setGetMessages(String getMessages) { this.getMessages = getMessages; } }
问题在clickOnRegisterMobileNumber和clickOnSendCommandToRobot方法
解决方法
我的问题解决了,
在将以下行添加到您为setAdapter的特定活动的manifest中
android:configChanges="screenSize|orientation|screenLayout"
但是,如果您仅在这两种模式下设计“纵向”和“横向”布局或运行应用程序,则会返回最佳视图.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。