[英]PagerAdapter always getting called two times in ViewPager
I am trying to make a slider between TouchImageView
and PlayerView
( Exoplayer
) but I am unable to catch up with certain issues that are persisting even after several changes.我试图在TouchImageView
和PlayerView
( Exoplayer
) 之间制作一个滑块,但我无法赶上即使经过多次更改仍然存在的某些问题。 All the suggestions and answers are welcome.欢迎所有的建议和答案。 Pardon my questioning skills and please let me know if more inputs are needed for your analysis.请原谅我的提问技巧,如果您的分析需要更多输入,请告诉我。 Kindly also let me know if there is any other alternative to successfully meet my expectations of properly implementing views smoothly in ViewPager
.还请告诉我是否还有其他替代方法可以成功满足我在ViewPager
顺利正确实现视图的ViewPager
。
Problem description:-问题描述:-
Issues related to click on view :-与点击查看相关的问题:-
PlayerView
. PlayerView
也有同样的问题。 When the video thumbnail is clicked, the audio of clicked video as well as next video plays together.当点击视频缩略图时,点击视频的音频和下一个视频一起播放。Issues related to slider :-与滑块相关的问题:-
Attempts made by me to solve this issue :-我为解决此问题所做的尝试:-
playerView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {...})
method in PagerAdapter
to handle player states while sliding between views.我试图用playerView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {...})
在方法PagerAdapter
处理球员状态,而视图之间滑动。 Unfortunately, I was unable to grasp to use different player states.不幸的是,我无法掌握使用不同的播放器状态。viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {...}
method in StatusViewer
class.我还尝试在StatusViewer
类中使用viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {...}
方法。 StatusViewer
Java class (Setting PagerAdapter
class object in ViewPager
) :- 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
) (code mentioned below is inside instantiateItem
):- 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);
}
Thank you StackOverflow community for viewing this question.感谢 StackOverflow 社区查看此问题。 I resolved the above issue by below mentioned modifications :-我通过以下提到的修改解决了上述问题:-
PagerAdapter
) :- ImageSliderAdapter ( PagerAdapter
) 的变化:- -> Below mentioned code was added in onViewAttachedToWindow(View v)
:- -> 在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();
}
}
-> Below mentioned code was added in onViewDetachedFromWindow(View v)
:- -> 下面提到的代码被添加到onViewDetachedFromWindow(View v)
:-
if (filePath.endsWith(".mp4")){
player.release();
Objects.requireNonNull(playerView.getPlayer()).release();
}
-> player.play()
was added after player.prepare()
. -> player.play()
是在player.prepare()
之后添加的。
StatusViewer
Java class :- StatusViewer
Java 类的变化:- -> The below changes cured the issue of player malfunctioning and player's play
state and release
state. -> 以下更改解决了播放器故障和播放器play
状态和release
状态的问题。 I used the smoothScroll: false
in setCurrentItem
.我在setCurrentItem
使用了smoothScroll: false
。
viewPager.setCurrentItem(position,false);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.