簡體   English   中英

分頁庫未將任何數據發送到我的PagedListAdapter

[英]Paging library is not sending any data to my PagedListAdapter

我有一個Android待辦事項列表應用程序,該應用程序具有使用Room訪問的SQLite數據庫。 然后,我想在導航抽屜中列出可用列表。 因此,我使用了分頁庫。 現在,RecyclerView是空的,我不知道為什么。 順便說一句:我的名單都沒有。 我是初學者,因此我堅持使用官方教程。 我已經發現它們是錯誤的,並且ViewModel需要一個空的構造函數。 現在情況看起來像這樣:設置適配器的方法成功調用(8),創建了ViewModel (7)創建了Adapter (1),調用了setList()方法(9),但是沒有Holder在創建(4)時,不會調用onCreateViewHolderonBindViewHolder (2,3),不會DiffCalback方法(5,6),僅顯示一個空的Recycler視圖。 PagedList<SQLList>包含正確的信息,但是沒有信息傳遞給適配器。 有人知道為什么嗎? //對不起我的英語不好。

適配器類:

//this is my Adapter. SQLList is my object (Equivalent to the User object in 
the tutorial)
public class ListsAdapter extends PagedListAdapter<SQLList,ListsAdapter.Holder> {
private Context context;

public ListsAdapter(Context context) {
//1
    super(DIFF_CALLBACK);
    this.context = context;
}

@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
    //2
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.list_item,null);
    return new Holder(view);
}

@Override
public void onBindViewHolder(Holder holder, int position) {
    //3
    SQLList item = getItem(position);
    if (item == null){
        holder.clear();
    }else {
        holder.bindTo(item);
    }
}




public static class Holder extends RecyclerView.ViewHolder {
    public TextView textView;
    public int id;
    public TextView idView;

    public Holder(View itemView) {
        //4
        super(itemView);
        textView = itemView.findViewById(R.id.textView);
        idView = itemView.findViewById(R.id.idTextView);
    }

    public void bindTo(SQLList list) {
        textView.setText(list.getName());
        id = list.getId();
        idView.setText(Integer.toString(list.getId()));
    }

    public void clear() {
        textView.setText("");
        id = 0;
        idView.setText("0");
    }
}

private static final DiffCallback<SQLList> DIFF_CALLBACK = new DiffCallback<SQLList>() {
    @Override
    public boolean areItemsTheSame(@NonNull SQLList oldItem, @NonNull SQLList newItem) {
        //5
        return oldItem.getId() == newItem.getId();
    }

    @Override
    public boolean areContentsTheSame(@NonNull SQLList oldItem, @NonNull SQLList newItem) {
        //6
        return oldItem.getName().equals(newItem.getName());
    }
};
}

查看模型:

public static class ListViewModel extends ViewModel {
    public final LiveData<PagedList<SQLList>> listsList;
    public ListViewModel(){
        //7
        listsList = new LivePagedListBuilder<>(DMO.getDao().loadListFactory(),20).build();
    }
}

RecyclerView片段的一部分放在:

 ...
 //8
 ListViewModel listViewModel = ViewModelProviders.of(this).get(ListViewModel.class);
    adapter = new ListsAdapter(context);
    listViewModel.listsList.observe(this, new Observer<PagedList<SQLList>>() {
        @Override
        public void onChanged(@Nullable PagedList<SQLList> sqlLists) {
          //9  
          adapter.setList(sqlLists);
        }
    });
    recyclerView.setAdapter(adapter);
...

發現問題:我忘記設置布局管理器!

我有同樣的問題,但我不小心添加了-

RecyclerView.setHasFixedSize(true);

刪除后,它起作用了。

我遇到了同樣的問題,我只是刪除了RecyclerView.setHasFixedSize(true),然后它開始正常工作。

我必須設置適配器。 recyclerView.setAdapter(adapter);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM