[英]PagerAdapter always getting called two times in ViewPager
我試圖在TouchImageView
和PlayerView
( Exoplayer
) 之間制作一個滑塊,但我無法趕上即使經過多次更改仍然存在的某些問題。 歡迎所有的建議和答案。 請原諒我的提問技巧,如果您的分析需要更多輸入,請告訴我。 還請告訴我是否還有其他替代方法可以成功滿足我在ViewPager
順利正確實現視圖的ViewPager
。
問題描述:-
與點擊查看相關的問題:-
PlayerView
也有同樣的問題。 當點擊視頻縮略圖時,點擊視頻的音頻和下一個視頻一起播放。與滑塊相關的問題:-
我為解決此問題所做的嘗試:-
playerView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {...})
在方法PagerAdapter
處理球員狀態,而視圖之間滑動。 不幸的是,我無法掌握使用不同的播放器狀態。StatusViewer
類中使用viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {...}
方法。 StatusViewer
Java 類(在ViewPager
設置PagerAdapter
類對象):-
modelFeedArrayList = (ArrayList<File>) getIntent().getSerializableExtra("modelFeedArrayList");
position = intent.getIntExtra("position", 0);
ImageSlideAdapter imageSlideAdapter = new ImageSlideAdapter(this,modelFeedArrayList,position);
viewPager.setAdapter(imageSlideAdapter);
viewPager.setCurrentItem(position);
viewPager.setOffscreenPageLimit(0);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
File currentFile = modelFeedArrayList.get(position);
String filePath = currentFile.toString();
if (filePath.endsWith(".jpg") || currentPage == position){
currentPage = position;
ImageSlideAdapter.player.pause();
}
else {
currentPage = position;
ImageSlideAdapter.player.play();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
ImageSliderAdapter ( PagerAdapter
) (下面提到的代碼在instantiateItem
里面):-
File currentFile = modelFeedArrayList.get(position);
String filePath = currentFile.toString();
if (currentFile.getAbsolutePath().endsWith(".mp4")) {
statusImageView.setVisibility(View.GONE);
playerView.setVisibility(View.VISIBLE);
player = new ExoPlayer.Builder(context).build();
MediaItem mediaItem = MediaItem.fromUri(filePath);
player.addMediaItem(mediaItem);
playerView.setPlayer(player);
player.prepare();
playerView.setBackgroundColor(context.getResources().getColor(android.R.color.black));
playerView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
Log.d("Filepath", filePath);
Log.d("Position", "" + position);
}
@Override
public void onViewDetachedFromWindow(View v) {
if (filePath.endsWith(".jpg") || currentPage == position || modelFeedArrayList.get(currentPage).getAbsolutePath().endsWith(".jpg")){
currentPage = position;
player.pause();
Objects.requireNonNull(playerView.getPlayer()).pause();
}
else {
player.release();
Objects.requireNonNull(playerView.getPlayer()).release();
}
}
});
} else {
playerView.setVisibility(View.GONE);
statusImageView.setVisibility(View.VISIBLE);
Glide.with(context).load(modelFeedArrayList.get(position)).into(statusImageView);
statusImageView.setBackgroundColor(context.getResources().getColor(android.R.color.black));
}
Objects.requireNonNull(container).addView(itemView);
return itemView;
}
@Override
public void destroyItem(@NonNull @NotNull ViewGroup container, int position, @NonNull @NotNull Object object) {
container.removeView((ConstraintLayout) object);
}
感謝 StackOverflow 社區查看此問題。 我通過以下提到的修改解決了上述問題:-
PagerAdapter
) 的變化:- -> 在onViewAttachedToWindow(View v)
添加了onViewAttachedToWindow(View v)
代碼:-
if (filePath.endsWith(".jpg") || currentPage == position || modelFeedArrayList.get(currentPage).getAbsolutePath().endsWith(".jpg")){
currentPage = position;
player.pause();
Objects.requireNonNull(playerView.getPlayer()).pause();
}
else {
player.pause();
Objects.requireNonNull(playerView.getPlayer()).pause();
if (filePath.endsWith(".mp4")){
player.pause();
Objects.requireNonNull(playerView.getPlayer()).pause();
}
else {
player.play();
Objects.requireNonNull(playerView.getPlayer()).play();
}
}
-> 下面提到的代碼被添加到onViewDetachedFromWindow(View v)
:-
if (filePath.endsWith(".mp4")){
player.release();
Objects.requireNonNull(playerView.getPlayer()).release();
}
-> player.play()
是在player.prepare()
之后添加的。
StatusViewer
Java 類的變化:- -> 以下更改解決了播放器故障和播放器play
狀態和release
狀態的問題。 我在setCurrentItem
使用了smoothScroll: false
。
viewPager.setCurrentItem(position,false);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.