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