【问题标题】:RecyclerView not creating items - ( MVVM + Room + LiveData)RecyclerView 不创建项目 - (MVVM + Room + LiveData)
【发布时间】:2019-10-17 12:55:13
【问题描述】:

没有创建 RecyclerView 项目 - 我正在尝试向我的项目添加注释功能(使用 MVVM+Room+liveData)。

在新的 android studio 项目中使用相同的代码即可。在我现有的项目中实施它是问题所在。 (两者都使用 androidX 并且具有相同的实现)。

我的应用程序中的其他 recyclerView 工作正常(不适用于 MVVM)

回收器视图适配器未被访问 - 我使用了日志标志。

代码来源:https://codinginflow.com/tutorials/android/room-viewmodel-livedata-recyclerview-mvvm/part-6-recyclerview-adapter

笔记活动:

public class NoteActivity extends AppCompatActivity {

    private NoteViewModel noteViewModel;

    ArrayList<Reviews> reviewList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_note);

        RecyclerView recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setHasFixedSize(true);

        final NoteAdapter adapter = new NoteAdapter();
        recyclerView.setAdapter(adapter);

        noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
        noteViewModel.getAllNotes().observe(this, new Observer<List<Note>>() {
            @Override
            public void onChanged(@Nullable List<Note> notes) {
                adapter.setNotes(notes);
            }
        });
}

注意适配器:


public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.NoteHolder> {

    private static final String TAG = "Debug "+NoteAdapter.class.getSimpleName();

    private List<Note> notes = new ArrayList<>();

    @NonNull
    @Override
    public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.note_item, parent, false);
        Log.e (TAG, "in onCreateViewHolder");
        return new NoteHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull NoteHolder holder, int position) {
        Note currentNote = notes.get(position);
        holder.textViewTitle.setText(currentNote.getTitle());
        holder.textViewDescription.setText(currentNote.getDescription());
        holder.textViewPriority.setText(String.valueOf(currentNote.getPriority()));
        Log.e (TAG, "in onBindViewHolder");
    }

    @Override
    public int getItemCount() {
        return notes.size();
    }

    public void setNotes(List<Note> notes) {
        this.notes = notes;
        notifyDataSetChanged();

    }

    class NoteHolder extends RecyclerView.ViewHolder {
        private TextView textViewTitle;
        private TextView textViewDescription;
        private TextView textViewPriority;

        public NoteHolder(View itemView) {
            super(itemView);
            textViewTitle = itemView.findViewById(R.id.text_view_title);
            textViewDescription = itemView.findViewById(R.id.text_view_description);
            textViewPriority = itemView.findViewById(R.id.text_view_priority);
            Log.e (TAG, "in NoteHolder");
        }
    }
}

set notes void 是唯一可以访问的函数。 (使用日志标志)

带有 MVVM 类的整个代码在一个空白的工作室项目中工作。

可能是什么问题?

在登录它得到这个错误:

E/RecyclerView: No adapter attached; skipping layout

【问题讨论】:

  • 你能分享你的 logcat 输出吗?
  • 试试这个 noteViewModel.getAllNotes().observe(this, ::setData); public void setData(List notes){ adapter.setNotes(notes); }
  • @KishanMaurya - 我收到“noteViewModel.getAllNotes().observe(this, ::setData)”错误“::”在做什么?
  • @KishanMaurya - 我明白了:“语言级别'7'不支持方法引用”。
  • 乐于助人。

标签: android mvvm android-recyclerview


【解决方案1】:

登录 MVVM 组件后问题得到解决。

我从我的设备中删除了该应用程序并再次安装它,因此 Room 数据库实例已正确重新创建。显然,实例是空的(我不知道为什么)。

顺便说一句, 此日志错误不是问题的一部分(您可以在一切正常时得到它)在下面的链接中查看之前回答的问题

E/RecyclerView: No adapter attached; skipping layout 

recyclerview No adapter attached; skipping layout

【讨论】:

    猜你喜欢
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多