Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android刷新适配器工作后再次旋转设备大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当我将一些数据添加到“列表模型”中并且在旋转设备上恢复保存的数据时,此代码工作正常,不幸的是,在恢复数据并将其设置为在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);
    }@H_404_5@ 
 

添加到模型方法

@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);
    }@H_404_5@ 
 

我的适配器类:

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 U@R_489_9260@ewHolder(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:
                ((U@R_489_9260@ewHolder) 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);
    }
}@H_404_5@ 
 

我想知道为什么这段代码工作正常:

@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);
    }@H_404_5@ 
 

没有任何问题,后移动这行:

Robotviewmodel temp = new Robotviewmodel();

temp.setmessage("message");

        temp.setCommand(true);

        model.add(temp);

        adapter.notifyItemInserted(model.size() - 1);
        binding.registerRobot.scrollToPosition(adapter.getItemCount() - 1);@H_404_5@ 
 

到其他不起作用的方法:|

我的主持人:

public class ActivityRegisterPresenter {
    private ActivityRegisterContract view;

    public ActivityRegisterPresenter(ActivityRegisterContract mView) {
        view = mView;
    }

    ...
}@H_404_5@ 
 

和我的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;
    }
}@H_404_5@ 
 

SOURCE CODE IS HERE

问题在clickOnRegisterMobilenumber和clickOnSendCommandToRobot方法

解决方法

我的问题解决了,

在将以下行添加到您为setAdapter的特定活动的manifest中

android:configChanges="screenSize|orientation|screenLayout"@H_404_5@ 
 

但是,如果您仅在这两种模式下设计“纵向”和“横向”布局或运行应用程序,则会返回最佳视图.

大佬总结

以上是大佬教程为你收集整理的Android刷新适配器工作后再次旋转设备全部内容,希望文章能够帮你解决Android刷新适配器工作后再次旋转设备所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。