【发布时间】:2019-10-17 12:55:13
【问题描述】:
没有创建 RecyclerView 项目 - 我正在尝试向我的项目添加注释功能(使用 MVVM+Room+liveData)。
在新的 android studio 项目中使用相同的代码即可。在我现有的项目中实施它是问题所在。 (两者都使用 androidX 并且具有相同的实现)。
我的应用程序中的其他 recyclerView 工作正常(不适用于 MVVM)
回收器视图适配器未被访问 - 我使用了日志标志。
笔记活动:
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