【发布时间】:2018-10-10 08:20:24
【问题描述】:
我想对 Recyclerview 中仅包含文本和文本 + 图像的数据使用不同的布局。
我创建了两个布局,layout_post 用于纯文本数据,layout_post_with_image 用于文本+图像数据。
到目前为止,我的代码正在 RecycleView 中显示两种不同的布局,但问题是它只在第一个数据中显示 layout_post_with_image,在第二个数据中显示 layout_post,在第三个数据中显示 layout_post_with_image,无论数据我放,布局显示相同的模式。 所以有人可以帮助我吗?
这里是查看器
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.myapp.R;
import java.awt.font.TextAttribute;
public class PostViewHolder extends RecyclerView.ViewHolder {
public TextView textPost;
public TextView textTime;
public ImageView postImage;
public PostViewHolder(View itemView){
super(itemView);
textPost = (TextView) itemView.findViewById(R.id.post_description);
textTime = (TextView) itemView.findViewById(R.id.post_time);
postImage = (ImageView) itemView.findViewById(R.id.post_image);
}
}
这里是模型
package com.example.myapp.model;
public class Posts {
public String time, post, uid, image;
public Posts() {
}
public Posts(String time, String post, String uid, String image) {
this.time = time;
this.post = post;
this.uid = uid;
this.image = image;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
这里是homefragment
postListView = (RecyclerView)rootView.findViewById(R.id.all_user_post_list);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
postListView.setHasFixedSize(true);
postListView.setLayoutManager(linearLayoutManager);
firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Posts>()
.setQuery(PostsRef, Posts.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Posts, PostViewHolder>(firebaseRecyclerOptions) {
private final static int TEXT_ONLY = 1;
private final static int TEXT_WITH_IMAGE= 0;
public int getItemViewType(int position){
switch (position){
case 1:
return TEXT_ONLY;
default:
return TEXT_WITH_IMAGE;
}
}
@Override
protected void onBindViewHolder(@NonNull PostViewHolder holder, int position, @NonNull Posts model) {
if(holder.postImage !=null){
holder.textTime.setText(model.getTime());
holder.textPost.setText(model.getPost());
Picasso.get().load(model.getImage()).into(holder.postImage);
}else{
holder.textTime.setText(model.getTime());
holder.textPost.setText(model.getPost());
}
}
@NonNull
@Override
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
int layoutRes = 0;
switch (viewType) {
case TEXT_ONLY:
layoutRes = R.layout.layout_posts;
break;
case TEXT_WITH_IMAGE:
layoutRes = R.layout.layout_posts_with_image;
break;
}
View view = LayoutInflater.from(parent.getContext()).inflate(layoutRes, parent, false);
return new PostViewHolder(view);
}
};
firebaseRecyclerAdapter.startListening();
postListView.setAdapter(firebaseRecyclerAdapter);
return rootView;
更新: 我认为与其使用两种不同的布局,不如使用一种布局并为要更改的每个元素设置可见性更容易。
【问题讨论】:
-
你能更新 FirebaseRecyclerAdapter 代码吗?
标签: android firebase firebase-realtime-database android-recyclerview firebaseui