Я использую FragmentPagerAdapter для адаптации фрагментов внутри viewPager.Я написал код, и он работает правильно. Вот мой код
public class SPStoryDetailsAdapter extends FragmentPagerAdapter {
Context context;
public ArrayList<SPStoryContents> storyContents;
public SPStoryDetailsAdapter(ArrayList<SPStoryContents> storyContents, Context ctx, FragmentManager fm) {
super(fm);
context = ctx;
this.storyContents = storyContents;
}
@Override
public Fragment getItem(int position) {
return SPStoryDetailsFragment.newInstance(storyContents.get(position));
}
@Override
public int getCount() {
return 2; // I just test it with two elements
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
Я называю этот адаптер следующим образом.
pagerAdapter = new SPStoryDetailsAdapter(storyContents, this, getSupportFragmentManager());
pager = findViewById(R.id.viewPager);
pager.setAdapter(pagerAdapter);
pager.setPageTransformer(true, new SPSimpleTransformation());
pager.post(() -> pager.setCurrentItem(currentPagerIndex,false));
pageIndicatorView = findViewById(R.id.pageIndicatorView);
pageIndicatorView.attachToPager(pager);
pageIndicatorView.setVisibleDotCount(5);
pageIndicatorView.setVisibility(storyContents.size() > 1 ? View.VISIBLE : View.GONE);
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Вот мой фрагмент кода дочернего элемента
public class SPStoryDetailsFragment extends Fragment {
private View view;
public static SPStoryDetailsFragment newInstance(SPStoryContents storyContents) {
SPStoryDetailsFragment f = new SPStoryDetailsFragment();
Bundle b = new Bundle();
b.putSerializable("storyContent", storyContents);
f.setArguments(b);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.sp_story_details_fragment, container, false);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
SPLogger.logMassage("viewVisibility", "mediaType");
}
@Override
public void onStop() {
super.onStop();
SPLogger.logMassage("liveEvent", "onStop");
if (youTubePlayerView != null) {
youTubePlayerView.pauseYoutubeVideo();
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (!isVisibleToUser && isResumed()) {
SPLogger.logMassage("viewVisibility",
youTubePlayerView == null ? "isNull" : "notNull2");
SPLogger.logMassage("viewVisibility", "Call code when Fragment not visible");
// Call code when Fragment not visible
} else if (isVisibleToUser && isResumed()) {
// Call code when Fragment becomes visible.
SPLogger.logMassage("viewVisibility",
youTubePlayerView == null ? "isNull" : "notNull");
SPLogger.logMassage("viewVisibility", "Call code when Fragment becomes visible");
}
if (youTubePlayerView != null) {
youTubePlayerView.pauseYoutubeVideo();
}
if (initializedYouTubePlayer != null)
initializedYouTubePlayer.pause();
}
} Я пытаюсь объяснить мою проблему.Как я уже сказал, viewpager работает отлично, но когда я запускаю viewPager, запускается оба дочерних фрагмента (в журнале я могу дважды показать viewVisibility).Можно ли каким-либо образом печатать только один раз, когда страница является текущей страницей?