我在试着克隆TikTok应用程序。对于主屏幕,我制作了一个带有like按钮、标题和注释的VerticalViewPager (自定义视图分页程序)。我正在从Firebase检索视频。TikTok模型有视频网址、标题名称和点赞数量。问题是,当我试图转到下一个视频时,之前的视频仍然在播放背景。我试着销毁碎片,但似乎不起作用。
这是我的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) {
}
});
}
}和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);
}
}发布于 2020-02-06 00:30:06
在您的TikTokFragment中,您可以考虑覆盖以下生命周期方法来暂停/恢复视频。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (videoView != null) videoView.pause();
} else {
if (videoView != null) videoView.resume();
}
}https://stackoverflow.com/questions/60079888
复制相似问题