首页 > 解决方案 > 我希望看到所有用户使用回收站视图发布

问题描述

我希望所有用户的帖子都显示在主页片段上,它显示所有用户的帖子,但每个帖子显示 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();
}
}

标签: javaandroidpostandroid-recyclerview

解决方案


将其发布为更好的代码格式的答案。我相信你应该简单地在 HomeFragment.readPosts() 中添加这样的帖子:

...
public void onDataChange(@NonNull DataSnapshot snapshot) {
    postsArrayList.clear();
    for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
        UsersPosts usersPosts = dataSnapshot.getValue(UsersPosts.class);
        postsArrayList.add(usersPosts);
    }
    ...
}

推荐阅读