I'm trying to clone the TikTok app. For the home screen, I made a VerticalViewPager (Custom view pager) with a like button, title, and comments. I'm retrieving videos from Firebase. TikTok model has a video URL, title name, and the number of likes. The problem is when I'm trying to go to the next video previous video is still playing the background. I tried to destroy the fragment but seems like it's not working.
Here's my HomeActivity.java
public class HomeActivity extends AppCompatActivity {
private VerticalPageViewer viewPager;
private ViewPageAdapter viewPageAdapter;
private List<TikTokModel> tikTokModels;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
viewPager = findViewById(R.id.viewPager);
tikTokModels = new ArrayList<>();
FirebaseFirestore.getInstance().collection("TikTok")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
tikTokModels.clear();
if(task.isSuccessful()){
for(QueryDocumentSnapshot queryDocumentSnapshot : task.getResult()){
tikTokModels.add(queryDocumentSnapshot.toObject(TikTokModel.class));
}
Log.d("TEST", "onComplete: "+tikTokModels.get(0).getTitle());
viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager(),tikTokModels);
viewPager.setAdapter(viewPageAdapter);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
}
And the ViewPageAdapter.java
class ViewPageAdapter extends PagerAdapter {
private List<TikTokModel> tikTokModels;
private Context context;
private ImageButton playButton;
private VideoView videoView;
ViewPageAdapter(List<TikTokModel> tikTokModels, Context context) {
this.tikTokModels= tikTokModels;
this.context = context;
}
@Override
public int getCount() {
return tikTokModels.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view.equals(object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View v = LayoutInflater.from(context).inflate(R.layout.tiktok_frame, container, false);
TextView title = v.findViewById(R.id.title);
videoView = v.findViewById(R.id.videoView);
LikeButton likeButton = v.findViewById(R.id.like);
playButton = v.findViewById(R.id.playButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (videoView.isPlaying()) {
videoView.pause();
playButton.setVisibility(View.VISIBLE);
} else {
videoView.resume();
playButton.setVisibility(View.INVISIBLE);
}
}
});
Uri uri = Uri.parse(tikTokModels.get(position).getUrl());
title.setText(tikTokModels.get(position).getTitle());
videoView.setVideoURI(uri);
videoView.requestFocus();
videoView.start();
playButton.setVisibility(View.INVISIBLE);
container.addView(v,0);
return v;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}