【发布时间】:2019-11-05 19:09:56
【问题描述】:
我正在开发一个工作估计应用程序,它将信息存储在房间数据库中,并通过 RecyclerView 保存对它的引用,用户可以使用它来访问数据并在需要时进行更改。
我正在使用实时数据通过片段内的观察者方法的视图模型检索对信息的引用。当用户完成表单并按下保存按钮时,此信息将存储在数据库中。
目前我开发了两个标准适配器,具有不同的数据集和单独的布局。
public class HallDetailAdapter extends RecyclerView.Adapter<HallDetailAdapter.myViewHolder> {
private List<HallDetails> mHallDetails;
public void setHallDetails(final List<HallDetails> hallDetails) {
this.mHallDetails = hallDetails;
notifyDataSetChanged();
}
@NonNull
@Override
public HallDetailAdapter.myViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_design,parent,false);
return new myViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final HallDetailAdapter.myViewHolder holder, final int position) {
if(mHallDetails != null){
HallDetails details = mHallDetails.get(position);
holder.mTextView.setText(details.getName());
}else{
holder.mTextView.setText("No Data Entry");
}
}
@Override
public int getItemCount() {
if(mHallDetails != null)
return mHallDetails.size();
else return 0;
}
class myViewHolder extends RecyclerView.ViewHolder{
private TextView mTextView;
public myViewHolder(@NonNull final View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.display_name);
}
}
}
public class RoomDetailsAdapter extends RecyclerView.Adapter<RoomDetailsAdapter.myViewHolder> {
private List<RoomDetails> mRoomDetails;
public void setRoomDetails(final List<RoomDetails> roomDetails) {
this.mRoomDetails = roomDetails;
notifyDataSetChanged();
}
@NonNull
@Override
public RoomDetailsAdapter.myViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_design2,parent,false);
return new myViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final RoomDetailsAdapter.myViewHolder holder, final int position) {
if(mRoomDetails != null) {
RoomDetails details = mRoomDetails.get(position);
holder.mTextView.setText(details.getName());
}else{
holder.mTextView.setText("No data entry");
}
}
@Override
public int getItemCount() {
if(mRoomDetails != null){
return mRoomDetails.size();
}else return 0;
}
public class myViewHolder extends RecyclerView.ViewHolder{
private TextView mTextView;
public myViewHolder(@NonNull final View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.display_roomDetails);
}
}
关于在 Fragment 内部调用的更改方法:
dataViewModel.getName().observe(getActivity(), new Observer<List<HallDetails>>() {
@Override
public void onChanged(final List<HallDetails> hallDetails) {
if(hallDetails != null) {
hallDetailAdapter.setHallDetails(hallDetails);
}
}
});
dataViewModel.getGetName2().observe(getActivity(), new Observer<List<RoomDetails>>() {
@Override
public void onChanged(final List<RoomDetails> roomDetails) {
if(roomDetails != null) {
roomDetailsAdapter.setRoomDetails(roomDetails);
}
}
});
我的问题是,我如何将多个布局集成到 RecyclerView 中,同时还要遵守这些功能:
- 在回收站视图中添加和删除项目
- 为每个显示的项目设置一个点击监听器
- 在相应布局内显示数据,该布局已在适配器内引用,通过实时数据更新。
感谢您的帮助!
【问题讨论】:
标签: android android-studio android-fragments android-recyclerview