Android Room分页不起作用 [英] Android Room Pagination not working

查看:1051
本文介绍了Android Room分页不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用android Room API从sQlite加载页面中的记录.

I am trying to use android Room API to load records from sQlite in pages.

问题是分页库正在将整个数据库加载到模型类中,并将其与使UI线程跳过帧的适配器绑定在一起.它假设要加载20条记录,然后在需要时继续添加更多

The issue is Paging library is loading entire database into model class and binding it with the adapter which is making UI thread skip frames. It suppose to load 20 records and then keep on adding more when required

这是我的视图模型类

public class UserViewModel extends ViewModel {

    public LiveData<PagedList<User>> userList;

    public UserViewModel() {

    }

    public void init(UserDao userDao) {
        PagedList.Config pagedListConfig =
                (new PagedList.Config.Builder()).setEnablePlaceholders(true)
                        .setPrefetchDistance(10)
                        .setPageSize(20).build();

        userList = (new LivePagedListBuilder(userDao.usersByFirstName(),
                pagedListConfig))
                .build();

    }
}

页面适配器

public class UserAdapter extends PagedListAdapter<User, UserAdapter.UserItemViewHolder> {


    protected UserAdapter() {
        super(User.DIFF_CALLBACK);
    }

    @Override
    public UserItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.item_user_list, parent, false);
        return new UserItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(UserItemViewHolder holder, int position) {
        User user= getItem(position);
        if(user!=null) {
            holder.bindTo(user);
        }
    }

    static class UserItemViewHolder extends RecyclerView.ViewHolder {
        TextView userName, userId;

        public UserItemViewHolder(View itemView) {
            super(itemView);
            userId = itemView.findViewById(R.id.userId);
            userName = itemView.findViewById(R.id.userName);
        }

        public void bindTo(User user) {
            userName.setText(user.firstName);
            userId.setText(String.valueOf(user.userId));
        }
    }
}

与回收站视图绑定:

  UserViewModel viewModel =
                ViewModelProviders
                        .of(this)
                        .get(UserViewModel.class);
        viewModel.init(userDao);
        final UserAdapter userUserAdapter = new UserAdapter();

        viewModel.userList.observe(this, pagedList -> {
            Toast.makeText(this, "Page " + pagedList.size(), Toast.LENGTH_SHORT).show();
            Log.e("Paging ", "Page " + pagedList.size());
            userUserAdapter.setList(pagedList);
        });

        recyclerView.setAdapter(userUserAdapter);

02-18 10:19:40.409 15310-15310/com.androidkt.archpaging E/Paging:页面 200

02-18 10:19:40.409 15310-15310/com.androidkt.archpaging E/Paging: Page 200

任何想法我想念的东西.

Any idea what I am missing.

推荐答案

您应致电userUserAdapter.submitList(pagedList). setList()用于RecyclerView.Adapter而不用于PagedListAdapter.

You should call userUserAdapter.submitList(pagedList). setList() is used for RecyclerView.Adapter not for PagedListAdapter.

这篇关于Android Room分页不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆