java - 我希望看到所有用户使用回收站视图发布
问题描述
我希望所有用户的帖子都显示在主页片段上,它显示所有用户的帖子,但每个帖子显示 7 次。我不确定错误在哪里,但我想在这部分得到一些帮助,以便我可以完成这个项目,我是 java 编码的新手,任何人都可以帮助我。提前谢谢你这是我的帖子适配器
public class PostsAdapter extends RecyclerView.Adapter<PostsAdapter.myViewHolderClass> {
public static final String HOME_POSTS_TYPE = "FROM_VIEW_PROFILE";
public static final String IMAGE_LIKED = "IMAGE_LIKED";
public static final String IMAGE_NOT_LIKED = "IMAGE_NOT_LIKED";
public static final String FROM_HOME_FRAGMENT = "FROM_HOME_FRAGMENT";
private static final String TAG = "POST_ADAPTER";
Context context;
ArrayList<UsersPosts> usersPosts;
LinearLayoutManager layoutManager;
ArrayList<Comment> commentList = new ArrayList<>();
public PostsAdapter(Context context, ArrayList<UsersPosts> usersPosts, LinearLayoutManager layoutManager) {
this.context = context;
this.usersPosts = usersPosts;
this.layoutManager = layoutManager;
}
@NonNull
@Override
public myViewHolderClass onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.posts_recycler_view_layout, parent, false);
return new myViewHolderClass(view);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull myViewHolderClass holder, int position) {
if (usersPosts.get(position).getImageUri().toLowerCase().contains(Constants.VIDEO_FILE_FIREBASE)) {
holder.postImageView.setVisibility(View.GONE);
holder.imgPlaceHolder.setVisibility(View.GONE);
holder.mainVideoLayout.setVisibility(View.VISIBLE);
playVideo(holder, usersPosts.get(position).getImageUri());
} else {
holder.playIcon.setVisibility(View.GONE);
holder.mainVideoLayout.setVisibility(View.GONE);
holder.imgPlaceHolder.setVisibility(View.VISIBLE);
holder.postImageView.setVisibility(View.VISIBLE);
GlideImageLoader.loadImageWithPlaceHolder(context, usersPosts.get(position).getImageUri()
, holder.postImageView, holder.imgPlaceHolder);
//If Posts Turn off Comments is enabled.
if (usersPosts.get(position).isTurnOffComments()) {
holder.allCommentsLayout.setVisibility(View.GONE);
holder.commentIcon.setVisibility(View.GONE);
} else {
holder.allCommentsLayout.setVisibility(View.VISIBLE);
holder.commentIcon.setVisibility(View.VISIBLE);
}
}
//Likes
HashMap<String, Object> hashMap = usersPosts.get(position).getLikes();
if (hashMap == null) {
holder.likeIcon.setTag(IMAGE_NOT_LIKED);
holder.likesCount.setText("0 Likes");
}
//Date
holder.timeCreated.setText(DateUtils.getRelativeTimeSpanString(
Long.parseLong(usersPosts.get(position).getDateCreated()),
System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS));
bindUsersData(holder.profilePic, holder.usernameAndCaption, holder.userName, usersPosts.get(position).getCaption(),
usersPosts.get(position).getUserId(), position);
HelperMethods ob1 = new HelperMethods(context, usersPosts.get(position).getPostId(), holder.likeIcon);
ob1.likeListener(holder.likesCount);
getComments(usersPosts.get(position).getPostId(), holder.allCommentsLayout, holder.viewAllCommentsTxt);
}
private void playVideo(myViewHolderClass holderClass, String imageUri) {
holderClass.playIcon.setVisibility(View.GONE);
holderClass.videoView.setVisibility(View.VISIBLE);
holderClass.videoLoadingLayout.setVisibility(View.VISIBLE);
String videoUriLastPathSegment = Uri.parse(imageUri).getLastPathSegment();
if (CachingVideos.isVideoExistsInCache(context, videoUriLastPathSegment)) {
assert videoUriLastPathSegment != null;
holderClass.videoView.setVideoPath(CachingVideos.getVideoFile(context, videoUriLastPathSegment).getPath());
} else
CachingVideos.putVideoIntoCache(context, holderClass.videoView, imageUri);
holderClass.mainVideoLayout.setOnClickListener(v -> {
if (holderClass.videoView.isPlaying()) {
holderClass.playIcon.setVisibility(View.VISIBLE);
holderClass.videoView.pause();
} else {
holderClass.videoView.start();
holderClass.playIcon.setVisibility(View.GONE);
}
});
holderClass.videoView.setOnCompletionListener(mp -> holderClass.videoView.start());
holderClass.videoView.setOnPreparedListener(mp -> {
holderClass.videoLoadingLayout.setVisibility(View.GONE);
});
}
public void getComments(String postID, final LinearLayout viewAllComment, final TextView commentTxt) {
FirebaseDatabase.getInstance().getReference(context.getString(R.string.DB_COMMENTS))
.child(postID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
commentList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
Comment comment = dataSnapshot.getValue(Comment.class);
commentList.add(comment);
}
if (commentList.size() == 0)
viewAllComment.setVisibility(View.GONE);
else {
viewAllComment.setVisibility(View.VISIBLE);
commentTxt.setText(context.getString(R.string.com___, commentList.size()));
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public int getItemCount() {
return usersPosts.size();
}
private void bindUsersData(final ImageView profilePic, final TextView nameAndCaption, final TextView userName,
final String caption, String userID, final int position) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference(context.getString(R.string.DB_USERS)).child(userID);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
User userDetails = snapshot.getValue(User.class);
usersPosts.get(position).setUser(userDetails);
assert userDetails != null;
if (userDetails.getProfilePic() != null) {
if (!userDetails.getProfilePic().equals(""))
Glide.with(context.getApplicationContext()).load(userDetails.getProfilePic()).into(profilePic);
}
userName.setText(userDetails.getUsername());
nameAndCaption.setText(HelperMethods.usernameAndCaption(userDetails.getUsername(), caption));
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
public class myViewHolderClass extends RecyclerView.ViewHolder implements View.OnClickListener {
CardView playIcon;
VideoView videoView;
FrameLayout videoLoadingLayout;
ConstraintLayout mainVideoLayout;
ImageView profilePic, postImageView, likeIcon,
optionMenu, commentIcon, shareIcon;
TextView userName, usernameAndCaption, likesCount,
viewAllCommentsTxt, timeCreated;
LinearLayout allCommentsLayout, imgPlaceHolder;
public myViewHolderClass(@NonNull View itemView) {
super(itemView);
userName = itemView.findViewById(R.id.textView46);
likeIcon = itemView.findViewById(R.id.imageView13);
profilePic = itemView.findViewById(R.id.profile_pic_2);
postImageView = itemView.findViewById(R.id.imageView8);
commentIcon = itemView.findViewById(R.id.imageView14);
optionMenu = itemView.findViewById(R.id.imageView5);
timeCreated = itemView.findViewById(R.id.textView59);
likesCount = itemView.findViewById(R.id.textView8);
videoView = itemView.findViewById(R.id.videoView2);
playIcon = itemView.findViewById(R.id.cardView31);
shareIcon = itemView.findViewById(R.id.imageView15);
mainVideoLayout = itemView.findViewById(R.id.frameLayout);
videoLoadingLayout = itemView.findViewById(R.id.placeholder);
viewAllCommentsTxt = itemView.findViewById(R.id.textView11);
imgPlaceHolder = itemView.findViewById(R.id.linearLayout44);
usernameAndCaption = itemView.findViewById(R.id.textView47);
allCommentsLayout = itemView.findViewById(R.id.linearLayout26);
likeIcon.setOnClickListener(this);
optionMenu.setOnClickListener(this);
userName.setOnClickListener(this);
commentIcon.setOnClickListener(this);
allCommentsLayout.setOnClickListener(this);
shareIcon.setOnClickListener(this);
}
@Override
public void onClick(View view) {
HelperMethods ob1 = new HelperMethods(context, usersPosts.get(getAdapterPosition()).getPostId(), likeIcon);
User userObject = usersPosts.get(getAdapterPosition()).getUser();
if (view.getId() == R.id.imageView13) {
if (likeIcon.getTag().equals(IMAGE_NOT_LIKED))
ob1.likePostAndSaveIntoDatabase();
else
ob1.unLikePost();
} else if (view.getId() == R.id.imageView5) {
ViewPostBottomSheet bottomSheet = new ViewPostBottomSheet(HOME_POSTS_TYPE);
bottomSheet.setTargetFragment(((FragmentActivity) (context)).getSupportFragmentManager()
.findFragmentByTag(MAIN_ACTIVITY_FRAGMENT), 100);
bottomSheet.show(((FragmentActivity) context).getSupportFragmentManager(), "ViewProfileBottomSheet");
} else if (view.getId() == R.id.textView46) {
ViewProfileFragment viewProfileFragment = new ViewProfileFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(FROM_HOME_FRAGMENT, userObject);
viewProfileFragment.setArguments(bundle);
((FragmentActivity) context).getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentHolder, viewProfileFragment).addToBackStack(MAIN_ACTIVITY_FRAGMENT).commit();
}
//Comments Activity
else if (view.getId() == R.id.imageView14 || view.getId() == R.id.linearLayout26)
startCommentActivity(userObject, getAdapterPosition());
else if (view.getId() == R.id.imageView15)
openShareFragment(getAdapterPosition());
}
}
private void startCommentActivity(User userObject, int adapterPosition) {
UsersPosts userPost = usersPosts.get(adapterPosition);
Intent intent = new Intent(context, CommentsActivity.class);
intent.putExtra(Constants.USER_OBJECT, userObject);
intent.putExtra(Constants.USER_POST_OBJECT, userPost);
context.startActivity(intent);
}
private void openShareFragment(int adapterPosition) {
ShareBottomSheet bottomSheet = new ShareBottomSheet(context, usersPosts.get(adapterPosition));
bottomSheet.show(((FragmentActivity) (context)).getSupportFragmentManager(), "SHARE_BOTTOM_SHEET");
}
@Override
public void onViewAttachedToWindow(@NonNull final myViewHolderClass holder) {
super.onViewAttachedToWindow(holder);
if (holder.mainVideoLayout.getVisibility() == View.VISIBLE) {
holder.videoLoadingLayout.setVisibility(View.VISIBLE);
} else
holder.playIcon.setVisibility(View.GONE);
}
@Override
public void onViewDetachedFromWindow(@NonNull myViewHolderClass holder) {
super.onViewDetachedFromWindow(holder);
if (holder.videoView.isPlaying()) {
holder.videoView.pause();
holder.playIcon.setVisibility(View.GONE);
}
}
}
这是我的家庭片段,我希望在其中显示所有帖子
public class HomeFragment extends Fragment {
public static final String TAG = "HOME_FRAGMENT";
View view;
Toolbar toolbar;
ProgressBar progressBar;
PostsAdapter postsAdapter;
RecyclerView recyclerView;
LinearLayout noPostLayout;
FirebaseUser firebaseUser;
FirebaseDatabase firebaseDatabase;
LinearLayoutManager linearLayoutManager;
TextView all;
List<String> userFollowingList = new ArrayList<>();
ArrayList<UsersPosts> postsArrayList = new ArrayList<>();
float visiblePercent = 40;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.fragment_home, container, false);
recyclerView = view.findViewById(R.id.recycler_view);
toolbar = view.findViewById(R.id.toolbar5);
noPostLayout = view.findViewById(R.id.linearLayout13);
progressBar = view.findViewById(R.id.progressBar4);
all = view.findViewById(R.id.all);
firebaseDatabase = FirebaseDatabase.getInstance();
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
//Setting Up RecyclerView
linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, true);
linearLayoutManager.setStackFromEnd(true);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(linearLayoutManager);
postsAdapter = new PostsAdapter(getContext(), postsArrayList, linearLayoutManager);
recyclerView.setAdapter(postsAdapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
playVideo(newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
}
});
toolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.search_icon) {
startActivity(new Intent(getActivity(), SearchActivity.class));
Objects.requireNonNull(getActivity()).overridePendingTransition(0, 0);
} else {
Intent intent = new Intent(getActivity(), MainChatActivity.class);
startActivity(intent);
}
return true;
});
checkFollowings();
}
return view;
}
public void checkFollowings() {
final DatabaseReference followingList = firebaseDatabase.getReference(getString(R.string.DB_FOLLOW)).child(firebaseUser.getUid())
.child(getString(R.string.USER_FOLLOWING));
followingList.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
userFollowingList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
userFollowingList.add(dataSnapshot.getKey());
}
//this will get the post of the users that the main user is following
readPosts();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
});
}
private void readPosts() {
DatabaseReference mRef = firebaseDatabase.getReference(getString(R.string.DB_POST));
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
postsArrayList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
UsersPosts usersPosts = dataSnapshot.getValue(UsersPosts.class);
assert usersPosts != null;
for (String id : userFollowingList) {
postsArrayList.add(usersPosts);
/* if (usersPosts.getUserId().equals(id)) {
postsArrayList.add(usersPosts);
}*/
}
}
if (postsArrayList.size() == 0) {
recyclerView.setVisibility(View.GONE);
noPostLayout.setVisibility(View.VISIBLE);
} else {
noPostLayout.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
postsAdapter.notifyDataSetChanged();
}
progressBar.setVisibility(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
});
}
@Override
public void onDestroyView() {
Log.d(TAG, "onDestroyView: ");
if (view.getParent() != null) {
((ViewGroup) view.getParent()).removeView(view);
}
super.onDestroyView();
}
}
解决方案
将其发布为更好的代码格式的答案。我相信你应该简单地在 HomeFragment.readPosts() 中添加这样的帖子:
...
public void onDataChange(@NonNull DataSnapshot snapshot) {
postsArrayList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
UsersPosts usersPosts = dataSnapshot.getValue(UsersPosts.class);
postsArrayList.add(usersPosts);
}
...
}
推荐阅读
- node.js - 使用 Axios 和 Nuxt 发送 post 请求时 formData 为空
- python - 如何将多个 Excel 文件发送到 Outlook 中的多个组?
- jwt - 除了 ADB2C Token 之外,单独创建另一个 JWT Token 进行授权
- node.js - npm 包没有安装 clarifai-nodejs-grpc
- reactjs - 自定义图例并不总是使用 react-chartjs-2 呈现
- ios - 迁移到 xcframwork Xcode 12.5,dyld:未加载库
- c++ - 如何使用 NODEMCU 同时使用 MFRC522 和 RDM6300
- windows-machine-learning - 访问 TensorFloat 数据
- python - 我正在尝试使用回溯解决 N 个皇后。我的解决方案是计算值,但是返回逻辑有问题
- javascript - 尝试在单击按钮时从两个不同的文本区域复制文本