Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android studio Recyclerview中切换视图类型_Java_Android_Android Recyclerview_View - Fatal编程技术网

Java 在android studio Recyclerview中切换视图类型

Java 在android studio Recyclerview中切换视图类型,java,android,android-recyclerview,view,Java,Android,Android Recyclerview,View,我有两种视图类型。一个是帖子,一个是视频。我只想在recyclerview的顶部显示一次video viewtype,并在其下方加载其余的post viewtype。有人知道这个问题的答案吗我真的很感激。提前谢谢。(当前问题:post viewtype显示一次,然后video viewtype显示一次,并重复此操作。我希望view viewtype仅在顶部显示一次,并在其下方显示post viewtype的其余部分。) HomeFragment.java public class HomeFra

我有两种视图类型。一个是帖子,一个是视频。我只想在recyclerview的顶部显示一次video viewtype,并在其下方加载其余的post viewtype。有人知道这个问题的答案吗我真的很感激。提前谢谢。(当前问题:post viewtype显示一次,然后video viewtype显示一次,并重复此操作。我希望view viewtype仅在顶部显示一次,并在其下方显示post viewtype的其余部分。)

HomeFragment.java

public class HomeFragment extends Fragment {

RecyclerView postRecyclerView;
PostAdapter postAdapter;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
FirebaseStorage mStorage;

List postList = new ArrayList<>();

ImageButton scrollUpBtn;
ProgressBar progressBar;

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View fragmentView = inflater.inflate(R.layout.fragment_home, container, false);
    View root = fragmentView;
    postRecyclerView = fragmentView.findViewById(R.id.postRV);
    scrollUpBtn = fragmentView.findViewById(R.id.scrollUpBtn);
    postRecyclerView.setHasFixedSize(true);
    progressBar = fragmentView.findViewById(R.id.progressbar_home);

    Paper.init(getActivity().getApplicationContext());
    updateView((String) Paper.book().read("language"));

    postRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 1, LinearLayoutManager.VERTICAL, false));
    firebaseDatabase = FirebaseDatabase.getInstance();
    mStorage = FirebaseStorage.getInstance();
    databaseReference = firebaseDatabase.getInstance().getReference("Posts");

    progressBar.setVisibility(View.VISIBLE);

    GetDataFromFirebase();

    scrollUpBtn.setVisibility(View.GONE);
    /*postRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

            if (dy < 0) {
                scrollUpBtn.setVisibility(View.VISIBLE);
            } else{
                scrollUpBtn.setVisibility(View.INVISIBLE);
            }
        }
    });*/

    scrollUpBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            postRecyclerView.smoothScrollToPosition(0);
        }
    });

    return root;
}

private void GetDataFromFirebase() {
    //Get List Posts from the database
    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postsnap: dataSnapshot.getChildren()){
                progressBar.setVisibility(View.GONE);

                postList.add(new VideoRow());

                Post post = postsnap.getValue(Post.class);
                post.setPostKey(postsnap.getKey());
                postList.add(post);
            }
            postAdapter = new PostAdapter(getActivity(), postList);
            postRecyclerView.setAdapter(postAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
}

private void updateView(String lang){
    Context context = LocaleHelper.setLocale(getActivity().getApplicationContext(), lang);
    Resources resources = context.getResources();

    //toolbarTitle.setText(resources.getString(R.string.toolbar_app_name));
}

private void showMessage(String message) {
    Toast.makeText(getActivity().getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

Context mContext;
//List<Post> mData;
List mData;

FirebaseAuth firebaseAuth;
FirebaseUser firebaseUser;
FirebaseDatabase firebaseDatabase;
FirebaseStorage mStorage;
DatabaseReference databaseReference, likeReference;
Boolean isConnected;
String PostKey;
Button delPostBtn;

public PostAdapter(Context mContext, List<Post> mData) {
    this.mContext = mContext;
    this.mData = mData;
    Collections.reverse(mData);
}

@Override
public int getItemViewType(int position) {
    if(Post.class.isInstance(mData.get(position))){
        return 0;
    }
    return 1;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    if(this.getItemViewType(i) == 0){
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_post_item, viewGroup, false);
        PostViewHolder holder = new PostViewHolder(view);
        return holder;
    }else{
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_post_video, viewGroup, false);
        VideoViewHolder holder = new VideoViewHolder(view);
        return holder;
    }
}

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int position) {

    if(this.getItemViewType(position) == 0){
        final Post post = (Post)mData.get(position);
        final PostViewHolder holder = (PostViewHolder) viewHolder;

        holder.tvDate.setText(post.getUserId());
        holder.tvDesc.setText(post.getDescription());
        final long timestamp = (long) (post.getTimeStamp());
        String date = timestampToString(timestamp);
        holder.tvDate.setText(date);
        Glide.with(mContext).load(post.getPicture()).into(holder.imgPost);
        Glide.with(mContext).load(post.getUserPhoto()).into(holder.imgPostProfile);

        isLikes(post.getPostKey(), holder.likeBtn);
        nrLikes(holder.likes, post.getPostKey());

        holder.likeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Get instance of Vibrator from current Context
                Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
                vibrator.vibrate(30);
                if (holder.likeBtn.getTag().equals("like")){
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).setValue(true);
                }else {
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).removeValue();
                }
            }
        });

        holder.imgPost.setOnClickListener(new DoubleClick(new DoubleClickListener() {
            @Override
            public void onSingleClick(View view) {
                // Single tap
            }

            @Override
            public void onDoubleClick(View view) {
                // Get instance of Vibrator from current Context
                Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
                vibrator.vibrate(30);
                if (holder.likeBtn.getTag().equals("like")){
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).setValue(true);
                }else {
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).removeValue();
                }
            }
        }));
    }else{
        VideoRow mainVideo = (VideoRow) mData.get(position);
        VideoViewHolder holder = (VideoViewHolder)viewHolder;
    }
}

@Override
public int getItemCount() {
    return mData.size();
}

public class PostViewHolder extends RecyclerView.ViewHolder{

    TextView tvDesc, tvDate, likes;
    ImageView imgPost, imgPostProfile, likeBtn, commentBtn, shareBtn, downloadBtn;
    RecyclerView recyclerView;
    EditText editTextComment;

    public PostViewHolder(final View itemView){
        super(itemView);

        tvDesc = itemView.findViewById(R.id.row_post_desc);
        tvDate = itemView.findViewById(R.id.row_post_date);
        imgPost = itemView.findViewById(R.id.row_post_img);
        imgPostProfile = itemView.findViewById(R.id.row_post_profile);
        recyclerView = itemView.findViewById(R.id.postRV);
        editTextComment = itemView.findViewById(R.id.cafe_comment_edittext);
        delPostBtn = itemView.findViewById(R.id.deletePostBtn);
        likes = itemView.findViewById(R.id.row_post_likes);
        likeBtn = itemView.findViewById(R.id.row_post_likeBtn);
        commentBtn = itemView.findViewById(R.id.row_post_comment);
        shareBtn = itemView.findViewById(R.id.row_post_share);
        downloadBtn = itemView.findViewById(R.id.downloadBtnPostItem);

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseUser = firebaseAuth.getCurrentUser();
        firebaseDatabase = FirebaseDatabase.getInstance();
        mStorage = FirebaseStorage.getInstance();
        databaseReference = firebaseDatabase.getReference("Posts");

        if(firebaseUser.getEmail().equals("yolastudio05@gmail.com")){
            delPostBtn.setVisibility(View.VISIBLE);
        }else{
            delPostBtn.setVisibility(View.GONE);
        }

        downloadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent postDetailActivity = new Intent(mContext, PostDetailActivity.class);
                int position = getAdapterPosition();

                Post post = (Post)mData.get(position);

                // get post id
                PostKey = post.getPostKey();


                postDetailActivity.putExtra("userId", post.getUserId());
                postDetailActivity.putExtra("description", post.getDescription());
                postDetailActivity.putExtra("title", post.getTitle());
                postDetailActivity.putExtra("postImage", post.getPicture());
                postDetailActivity.putExtra("postKey", post.getPostKey());
                long timestamp = (long) post.getTimeStamp();
                postDetailActivity.putExtra("postData", timestamp);
                postDetailActivity.putExtra("downloadImg", true);
                mContext.startActivity(postDetailActivity);
            }
        });

        delPostBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

                builder.setTitle("Delete Post?")
                        .setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                int position = getAdapterPosition();

                                Post selectedItem = (Post) mData.get(position);
                                final String selectedKey = selectedItem.getPostKey();


                                final StorageReference imageRef = mStorage.getReferenceFromUrl(selectedItem.getPicture());
                                imageRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        databaseReference.child(selectedKey).removeValue();
                                        showMessage("Item deleted");
                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        showMessage("ERROR: " + e);
                                    }
                                });
                            }
                        }).setNegativeButton("Cancel", null);

                AlertDialog alert = builder.create();
                alert.show();
            }
        });

        commentBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent postDetailActivity = new Intent(mContext, PostDetailActivity.class);
                int position = getAdapterPosition();

                Post post = (Post)mData.get(position);

                postDetailActivity.putExtra("userId", post.getUserId());
                postDetailActivity.putExtra("description", post.getDescription());
                postDetailActivity.putExtra("title", post.getTitle());
                postDetailActivity.putExtra("postImage", post.getPicture());
                postDetailActivity.putExtra("postKey", post.getPostKey());
                postDetailActivity.putExtra("userPhoto", post.getUserPhoto());
                long timestamp = (long) post.getTimeStamp();
                postDetailActivity.putExtra("postData", timestamp);
                postDetailActivity.putExtra("commenting", true);
                mContext.startActivity(postDetailActivity);
            }
        });

        shareBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = getAdapterPosition();

                Post post = (Post)mData.get(position);

                String postImage = post.getPicture();
                String postTitle = post.getTitle();

                Intent myIntent = new Intent(Intent.ACTION_SEND);
                myIntent.setType("text/plain");
                String shareBody = "Please download IZONE Gallery*IZ to explore the posts.\n\nGoogle Play:\nhttps://play.google.com/store/apps/details?id=com.yolastudio.bilog";
                String shareSubject = "IZONE GALLERY*IZ " + postTitle;
                myIntent.putExtra(Intent.EXTRA_SUBJECT, shareSubject);
                myIntent.putExtra(Intent.EXTRA_TEXT, shareBody);
                mContext.startActivity(Intent.createChooser(myIntent, "Share " + postTitle));
            }
        });
    }
}

public class VideoViewHolder extends RecyclerView.ViewHolder{


    public VideoViewHolder(@NonNull View itemView) {
        super(itemView);

        //youTubePlayerView = itemView.findViewById(R.id.youtubePlayer);
    }
}

private void isLikes(String postid, final ImageView likeBtn){
    likeReference = firebaseDatabase.getReference()
            .child("Likes")
            .child(postid);

    likeReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.child(firebaseUser.getUid()).exists()){
                likeBtn.setImageResource(R.drawable.ic_liked);
                likeBtn.setTag("liked");
            }else {
                likeBtn.setImageResource(R.drawable.ic_like);
                likeBtn.setTag("like");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

private void nrLikes(final TextView likes, String postid){
    likeReference = firebaseDatabase.getInstance().getReference().child("Likes")
            .child(postid);
    likeReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.getChildrenCount() > 1){
                likes.setText(dataSnapshot.getChildrenCount() + " likes");
            }else {
                likes.setText(dataSnapshot.getChildrenCount() + " like");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

public void checkConnection(){
    ConnectivityManager manager = (ConnectivityManager)
            mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = manager.getActiveNetworkInfo();

    if(null != activeNetwork){
        if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI){
            isConnected = true;
        }

        if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE){
            isConnected = true;
        }
    }
    else{
        showMessage("No Internet Connection");
        isConnected = false;
    }
}

private String timestampToString(long time){
    Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
    calendar.setTimeInMillis(time);
    String date = DateFormat.format("dd-MM-yyyy", calendar).toString();
    return date;
}

private void showMessage(String message) {
    Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
}
公共类HomeFragment扩展了片段{
回收视图后回收视图;
后适配器后适配器;
FirebaseDatabase FirebaseDatabase;
数据库参考数据库参考;
火基存储;
List postList=new ArrayList();
图像按钮向上滚动;
ProgressBar ProgressBar;
公共视图onCreateView(@NonNull layoutiner充气机,
视图组容器,捆绑包savedInstanceState){
视图碎片视图=充气机。充气(R.layout.fragment\u home,container,false);
视图根=片段视图;
postRecyclerView=fragmentView.findViewById(R.id.postRV);
scrollUpBtn=fragmentView.findViewById(R.id.scrollUpBtn);
postRecyclerView.setHasFixedSize(true);
progressBar=fragmentView.findViewById(R.id.progressBar\u home);
init(getActivity().getApplicationContext());
updateView((字符串)Paper.book().read(“语言”);
setLayoutManager(新的GridLayoutManager(getContext(),1,LinearLayoutManager.VERTICAL,false));
firebaseDatabase=firebaseDatabase.getInstance();
mStorage=FirebaseStorage.getInstance();
databaseReference=firebaseDatabase.getInstance().getReference(“Posts”);
progressBar.setVisibility(View.VISIBLE);
GetDataFromFirebase();
scrollUpBtn.setVisibility(视图已消失);
/*postRecyclerView.addOnScrollListener(新的RecyclerView.OnScrollListener(){
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){
if(dy<0){
scrollUpBtn.setVisibility(视图可见);
}否则{
scrollUpBtn.setVisibility(视图不可见);
}
}
});*/
scrollUpBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
postRecyclerView.smoothScrollToPosition(0);
}
});
返回根;
}
私有void GetDataFromFirebase(){
//从数据库中获取列表帖子
databaseReference.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
对于(DataSnapshot postsnap:DataSnapshot.getChildren()){
progressBar.setVisibility(View.GONE);
添加(新的VideoRow());
Post Post=postsnap.getValue(Post.class);
setPostKey(postsnap.getKey());
postList.add(post);
}
postAdapter=新的postAdapter(getActivity(),postList);
postRecyclerView.setAdapter(postAdapter);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
}
私有void updateView(字符串lang){
Context Context=LocaleHelper.setLocale(getActivity().getApplicationContext(),lang);
Resources=context.getResources();
//toolbarTitle.setText(resources.getString(R.string.toolbar\u app\u name));
}
私有void showMessage(字符串消息){
Toast.makeText(getActivity().getApplicationContext(),message,Toast.LENGTH\u SHORT.show();
}
}

PostAdapter.java

public class HomeFragment extends Fragment {

RecyclerView postRecyclerView;
PostAdapter postAdapter;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
FirebaseStorage mStorage;

List postList = new ArrayList<>();

ImageButton scrollUpBtn;
ProgressBar progressBar;

public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    View fragmentView = inflater.inflate(R.layout.fragment_home, container, false);
    View root = fragmentView;
    postRecyclerView = fragmentView.findViewById(R.id.postRV);
    scrollUpBtn = fragmentView.findViewById(R.id.scrollUpBtn);
    postRecyclerView.setHasFixedSize(true);
    progressBar = fragmentView.findViewById(R.id.progressbar_home);

    Paper.init(getActivity().getApplicationContext());
    updateView((String) Paper.book().read("language"));

    postRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 1, LinearLayoutManager.VERTICAL, false));
    firebaseDatabase = FirebaseDatabase.getInstance();
    mStorage = FirebaseStorage.getInstance();
    databaseReference = firebaseDatabase.getInstance().getReference("Posts");

    progressBar.setVisibility(View.VISIBLE);

    GetDataFromFirebase();

    scrollUpBtn.setVisibility(View.GONE);
    /*postRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

            if (dy < 0) {
                scrollUpBtn.setVisibility(View.VISIBLE);
            } else{
                scrollUpBtn.setVisibility(View.INVISIBLE);
            }
        }
    });*/

    scrollUpBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            postRecyclerView.smoothScrollToPosition(0);
        }
    });

    return root;
}

private void GetDataFromFirebase() {
    //Get List Posts from the database
    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postsnap: dataSnapshot.getChildren()){
                progressBar.setVisibility(View.GONE);

                postList.add(new VideoRow());

                Post post = postsnap.getValue(Post.class);
                post.setPostKey(postsnap.getKey());
                postList.add(post);
            }
            postAdapter = new PostAdapter(getActivity(), postList);
            postRecyclerView.setAdapter(postAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
}

private void updateView(String lang){
    Context context = LocaleHelper.setLocale(getActivity().getApplicationContext(), lang);
    Resources resources = context.getResources();

    //toolbarTitle.setText(resources.getString(R.string.toolbar_app_name));
}

private void showMessage(String message) {
    Toast.makeText(getActivity().getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

Context mContext;
//List<Post> mData;
List mData;

FirebaseAuth firebaseAuth;
FirebaseUser firebaseUser;
FirebaseDatabase firebaseDatabase;
FirebaseStorage mStorage;
DatabaseReference databaseReference, likeReference;
Boolean isConnected;
String PostKey;
Button delPostBtn;

public PostAdapter(Context mContext, List<Post> mData) {
    this.mContext = mContext;
    this.mData = mData;
    Collections.reverse(mData);
}

@Override
public int getItemViewType(int position) {
    if(Post.class.isInstance(mData.get(position))){
        return 0;
    }
    return 1;
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    if(this.getItemViewType(i) == 0){
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_post_item, viewGroup, false);
        PostViewHolder holder = new PostViewHolder(view);
        return holder;
    }else{
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_post_video, viewGroup, false);
        VideoViewHolder holder = new VideoViewHolder(view);
        return holder;
    }
}

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int position) {

    if(this.getItemViewType(position) == 0){
        final Post post = (Post)mData.get(position);
        final PostViewHolder holder = (PostViewHolder) viewHolder;

        holder.tvDate.setText(post.getUserId());
        holder.tvDesc.setText(post.getDescription());
        final long timestamp = (long) (post.getTimeStamp());
        String date = timestampToString(timestamp);
        holder.tvDate.setText(date);
        Glide.with(mContext).load(post.getPicture()).into(holder.imgPost);
        Glide.with(mContext).load(post.getUserPhoto()).into(holder.imgPostProfile);

        isLikes(post.getPostKey(), holder.likeBtn);
        nrLikes(holder.likes, post.getPostKey());

        holder.likeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Get instance of Vibrator from current Context
                Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
                vibrator.vibrate(30);
                if (holder.likeBtn.getTag().equals("like")){
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).setValue(true);
                }else {
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).removeValue();
                }
            }
        });

        holder.imgPost.setOnClickListener(new DoubleClick(new DoubleClickListener() {
            @Override
            public void onSingleClick(View view) {
                // Single tap
            }

            @Override
            public void onDoubleClick(View view) {
                // Get instance of Vibrator from current Context
                Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
                vibrator.vibrate(30);
                if (holder.likeBtn.getTag().equals("like")){
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).setValue(true);
                }else {
                    firebaseDatabase.getReference().child("Likes").child(post.getPostKey())
                            .child(firebaseUser.getUid()).removeValue();
                }
            }
        }));
    }else{
        VideoRow mainVideo = (VideoRow) mData.get(position);
        VideoViewHolder holder = (VideoViewHolder)viewHolder;
    }
}

@Override
public int getItemCount() {
    return mData.size();
}

public class PostViewHolder extends RecyclerView.ViewHolder{

    TextView tvDesc, tvDate, likes;
    ImageView imgPost, imgPostProfile, likeBtn, commentBtn, shareBtn, downloadBtn;
    RecyclerView recyclerView;
    EditText editTextComment;

    public PostViewHolder(final View itemView){
        super(itemView);

        tvDesc = itemView.findViewById(R.id.row_post_desc);
        tvDate = itemView.findViewById(R.id.row_post_date);
        imgPost = itemView.findViewById(R.id.row_post_img);
        imgPostProfile = itemView.findViewById(R.id.row_post_profile);
        recyclerView = itemView.findViewById(R.id.postRV);
        editTextComment = itemView.findViewById(R.id.cafe_comment_edittext);
        delPostBtn = itemView.findViewById(R.id.deletePostBtn);
        likes = itemView.findViewById(R.id.row_post_likes);
        likeBtn = itemView.findViewById(R.id.row_post_likeBtn);
        commentBtn = itemView.findViewById(R.id.row_post_comment);
        shareBtn = itemView.findViewById(R.id.row_post_share);
        downloadBtn = itemView.findViewById(R.id.downloadBtnPostItem);

        firebaseAuth = FirebaseAuth.getInstance();
        firebaseUser = firebaseAuth.getCurrentUser();
        firebaseDatabase = FirebaseDatabase.getInstance();
        mStorage = FirebaseStorage.getInstance();
        databaseReference = firebaseDatabase.getReference("Posts");

        if(firebaseUser.getEmail().equals("yolastudio05@gmail.com")){
            delPostBtn.setVisibility(View.VISIBLE);
        }else{
            delPostBtn.setVisibility(View.GONE);
        }

        downloadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent postDetailActivity = new Intent(mContext, PostDetailActivity.class);
                int position = getAdapterPosition();

                Post post = (Post)mData.get(position);

                // get post id
                PostKey = post.getPostKey();


                postDetailActivity.putExtra("userId", post.getUserId());
                postDetailActivity.putExtra("description", post.getDescription());
                postDetailActivity.putExtra("title", post.getTitle());
                postDetailActivity.putExtra("postImage", post.getPicture());
                postDetailActivity.putExtra("postKey", post.getPostKey());
                long timestamp = (long) post.getTimeStamp();
                postDetailActivity.putExtra("postData", timestamp);
                postDetailActivity.putExtra("downloadImg", true);
                mContext.startActivity(postDetailActivity);
            }
        });

        delPostBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

                builder.setTitle("Delete Post?")
                        .setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                int position = getAdapterPosition();

                                Post selectedItem = (Post) mData.get(position);
                                final String selectedKey = selectedItem.getPostKey();


                                final StorageReference imageRef = mStorage.getReferenceFromUrl(selectedItem.getPicture());
                                imageRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        databaseReference.child(selectedKey).removeValue();
                                        showMessage("Item deleted");
                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        showMessage("ERROR: " + e);
                                    }
                                });
                            }
                        }).setNegativeButton("Cancel", null);

                AlertDialog alert = builder.create();
                alert.show();
            }
        });

        commentBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent postDetailActivity = new Intent(mContext, PostDetailActivity.class);
                int position = getAdapterPosition();

                Post post = (Post)mData.get(position);

                postDetailActivity.putExtra("userId", post.getUserId());
                postDetailActivity.putExtra("description", post.getDescription());
                postDetailActivity.putExtra("title", post.getTitle());
                postDetailActivity.putExtra("postImage", post.getPicture());
                postDetailActivity.putExtra("postKey", post.getPostKey());
                postDetailActivity.putExtra("userPhoto", post.getUserPhoto());
                long timestamp = (long) post.getTimeStamp();
                postDetailActivity.putExtra("postData", timestamp);
                postDetailActivity.putExtra("commenting", true);
                mContext.startActivity(postDetailActivity);
            }
        });

        shareBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = getAdapterPosition();

                Post post = (Post)mData.get(position);

                String postImage = post.getPicture();
                String postTitle = post.getTitle();

                Intent myIntent = new Intent(Intent.ACTION_SEND);
                myIntent.setType("text/plain");
                String shareBody = "Please download IZONE Gallery*IZ to explore the posts.\n\nGoogle Play:\nhttps://play.google.com/store/apps/details?id=com.yolastudio.bilog";
                String shareSubject = "IZONE GALLERY*IZ " + postTitle;
                myIntent.putExtra(Intent.EXTRA_SUBJECT, shareSubject);
                myIntent.putExtra(Intent.EXTRA_TEXT, shareBody);
                mContext.startActivity(Intent.createChooser(myIntent, "Share " + postTitle));
            }
        });
    }
}

public class VideoViewHolder extends RecyclerView.ViewHolder{


    public VideoViewHolder(@NonNull View itemView) {
        super(itemView);

        //youTubePlayerView = itemView.findViewById(R.id.youtubePlayer);
    }
}

private void isLikes(String postid, final ImageView likeBtn){
    likeReference = firebaseDatabase.getReference()
            .child("Likes")
            .child(postid);

    likeReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.child(firebaseUser.getUid()).exists()){
                likeBtn.setImageResource(R.drawable.ic_liked);
                likeBtn.setTag("liked");
            }else {
                likeBtn.setImageResource(R.drawable.ic_like);
                likeBtn.setTag("like");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

private void nrLikes(final TextView likes, String postid){
    likeReference = firebaseDatabase.getInstance().getReference().child("Likes")
            .child(postid);
    likeReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.getChildrenCount() > 1){
                likes.setText(dataSnapshot.getChildrenCount() + " likes");
            }else {
                likes.setText(dataSnapshot.getChildrenCount() + " like");
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

public void checkConnection(){
    ConnectivityManager manager = (ConnectivityManager)
            mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = manager.getActiveNetworkInfo();

    if(null != activeNetwork){
        if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI){
            isConnected = true;
        }

        if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE){
            isConnected = true;
        }
    }
    else{
        showMessage("No Internet Connection");
        isConnected = false;
    }
}

private String timestampToString(long time){
    Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
    calendar.setTimeInMillis(time);
    String date = DateFormat.format("dd-MM-yyyy", calendar).toString();
    return date;
}

private void showMessage(String message) {
    Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
}
公共类PostAdapter扩展了RecyclerView.Adapter{
语境;
//列出mData;
列出mData;
FirebaseAuth FirebaseAuth;
FirebaseUser FirebaseUser;
FirebaseDatabase FirebaseDatabase;
火基存储;
数据库引用数据库引用,如引用;
布尔不连通;
字符串后置键;
按钮delpostbn;
公共邮政适配器(上下文mContext、列表mData){
this.mContext=mContext;
this.mData=mData;
集合。反向(mData);
}
@凌驾
public int getItemViewType(int位置){
if(Post.class.isInstance(mData.get(position))){
返回0;
}
返回1;
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
if(this.getItemViewType(i)==0){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.row\u post\u项,viewGroup,false);
PostViewHolder=新的PostViewHolder(视图);
报税表持有人;
}否则{
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.row\u post\u视频,viewGroup,false);
VideoViewHolder=新的VideoViewHolder(视图);
报税表持有人;
}
}
@凌驾
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder ViewHolder,int位置){
if(this.getItemViewType(position)==0){
最终Post Post=(Post)mData.get(position);
最终后视图持有者=(后视图持有者)视图持有者;
holder.tvDate.setText(post.getUserId());
holder.tvDesc.setText(post.getDescription());
最终长时间戳=(长)(post.getTimeStamp());
字符串日期=时间戳字符串(时间戳);
holder.tvDate.setText(日期);
Glide.with(mContext).load(post.getPicture())到(holder.imgPost)中;
将(post.getUserPhoto())加载到(holder.imgPostProfile)中;
isLikes(post.getPostKey(),holder.likeBtn);
nrLikes(holder.likes,post.getPostKey());
holder.likeBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//从当前上下文获取可控震源的实例
可控震源=(可控震源)mContext.getSystemService(Context.可控震源\u服务);
B.vi