gpt4 book ai didi

Android刷新适配器在旋转后重新工作设备

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:03:19 26 4
gpt4 key购买 nike

当我将一些数据添加到“列表模型”并在旋转设备上恢复保存的数据时,这段代码工作正常,不幸的是在恢复数据并将其设置为 onRestoreInstanceState 中的 model 之后方法,向其中添加其他数据后,适配器 无法用新添加的数据刷新,适配器中的数据源可以更新,但适配器无法识别它们,我正在使用 MVVM 数据模型绑定(bind)并搜索有关此问题的更多时间我无法解决。

有一个简单的提示,在旋转再次设备后,我的适配器可以刷新所有添加的数据,而适配器不会刷新它们。

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, parent, 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;
}
}

SOURCE CODE IS HERE

问题出在 clickOnRegisterMobileNumberclickOnSendCommandToRobot 方法中

最佳答案

我的问题解决了,

将下面这行添加到您设置适配器的特定 Activity 的 list 中

android:configChanges="screenSize|orientation|screenLayout" 

但如果您同时设计纵向和横向布局或仅以其中一种模式运行应用程序,它将返回最佳 View 。

关于Android刷新适配器在旋转后重新工作设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43894042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com