如何用FirestoreRecyclerAdapter实现带回复的嵌套RecyclerView?
如何通过FirestoreRecyclerAdapter实现嵌套RecyclerView(仿Instagram评论回复功能)
我想为社交类应用开发类似Instagram的评论与回复功能,想确认是否可以通过FirestoreRecyclerAdapter实现嵌套RecyclerView。以下是我的现有代码结构,以及尝试在FirestoreRecyclerAdapter的ViewHolder中重复创建适配器的实现思路,但未能成功,也不确定这是否为正确的实现方式,附带相关代码。
原代码结构
主列表初始化代码:
homeRecycler = findViewById(R.id.homeRecycler); linearLayoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false); homeRecycler.setLayoutManager(linearLayoutManager); homeRecycler.setItemAnimator(null); StorageReference profileRef = storageReference.child("ProfileImage/"+fAuth.getCurrentUser().getUid()+"/profile.jpg"); profileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { Picasso.get().load(uri).into(prof_img); } }); Query query = fStore.collection("Post") .orderBy("homePostDate", Query.Direction.DESCENDING) .limit(50); FirestoreRecyclerOptions<HomeModel> options = new FirestoreRecyclerOptions.Builder<HomeModel>() .setQuery(query, HomeModel.class) .build(); swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @SuppressLint("NotifyDataSetChanged") @Override public void onRefresh() { adapter.notifyDataSetChanged(); swipeRefresh.setRefreshing(false); } }); adapter = new FirestoreRecyclerAdapter<HomeModel, ViewHolder>(options) { @Override protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull HomeModel model) { holder.bind(model); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup group, int i) { View view = LayoutInflater.from(group.getContext()) .inflate(R.layout.home_each, group,false); return new ViewHolder(view); } }; homeRecycler.setAdapter(adapter);
主列表ViewHolder:
class ViewHolder extends RecyclerView.ViewHolder{ TextView author, title, body, authorUid, docId, timestamp, upvotecount, downvotecount; Button addcoment; ToggleButton upvote, downvote; ImageView prof_img; HomeModel model; RecyclerView replyRecycler; public ViewHolder(@NonNull View itemView) {...} public void bind(HomeModel homeModel) {...} }
尝试实现嵌套的代码
评论列表嵌套回复列表的尝试代码:
commentRecycler = findViewById(R.id.commentRecycler); linearLayoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false); commentRecycler.setLayoutManager(linearLayoutManager); commentRecycler.setItemAnimator(null); Query query = fStore.collection("Post") .document(pdocId.getText().toString()).collection("comment") .orderBy("commentPostDate", Query.Direction.DESCENDING) .limit(50); FirestoreRecyclerOptions<CommentModel> options = new FirestoreRecyclerOptions.Builder<CommentModel>() .setQuery(query, CommentModel.class) .build(); adapter = new FirestoreRecyclerAdapter<CommentModel, ViewHolder>(options) { @Override protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull CommentModel model) { holder.bind(model); linearLayoutManager2 = new LinearLayoutManager(HomeView.this, RecyclerView.VERTICAL, false); holder.replyRecycler.setLayoutManager(linearLayoutManager2); holder.replyRecycler.setItemAnimator(null); Query query2 = fStore.collection("Post") .document(pdocId.getText().toString()).collection("comment") .document(model.docId).collection("reply") .orderBy("commentPostDate", Query.Direction.DESCENDING) .limit(50); FirestoreRecyclerOptions<ReplyModel> options2 = new FirestoreRecyclerOptions.Builder<ReplyModel>() .setQuery(query2, ReplyModel.class) .build(); adapter2 = new FirestoreRecyclerAdapter<ReplyModel, ViewHolder2>(options2) { @Override protected void onBindViewHolder(@NonNull ViewHolder2 holder, int position, @NonNull ReplyModel model) { holder.bind(model); Toast.makeText(HomeView.this, "this is test", Toast.LENGTH_SHORT).show(); } @NonNull @Override public ViewHolder2 onCreateViewHolder(@NonNull ViewGroup group, int i) { View view = LayoutInflater.from(group.getContext()) .inflate(R.layout.comment_each, group,false); return new ViewHolder2(view); } }; holder.replyRecycler.setAdapter(adapter2); } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup group, int i) { View view = LayoutInflater.from(group.getContext()) .inflate(R.layout.comment_each, group,false); return new ViewHolder(view); } }; commentRecycler.setAdapter(adapter);
新增的ViewHolder类
评论列表ViewHolder与回复列表ViewHolder:
class ViewHolder extends RecyclerView.ViewHolder{ TextView author, body, authorUid, docId, timestamp, pReply, upvotecount, downvotecount; TextInputLayout tilpReply; ImageView prof_img; Chip replyChip; ToggleButton upvote, downvote; ToggleButton replypop; Button replyBtn; CommentModel model; RecyclerView replyRecycler; public ViewHolder(@NonNull View itemView){...} public void bind(CommentModel commentModel){...} } class ViewHolder2 extends RecyclerView.ViewHolder{ TextView author, body, authorUid, docId, timestamp, pReply, upvotecount, downvotecount; TextInputLayout tilpReply; ImageView prof_img; Chip replyChip; ToggleButton upvote, downvote; ToggleButton replypop; Button replyBtn; CommentModel model; RecyclerView replyRecycler; public ViewHolder2(@NonNull View itemView){...} public void bind(CommentModel commentModel){...} }
内容的提问来源于stack exchange,提问作者czrest
相关产品推荐
相关产品推荐

