Skip to content

Commit

Permalink
Revert ViewPager2 use in ItemPagerFragment
Browse files Browse the repository at this point in the history
Because of "accidentally switch to another page when trying to scroll up/down"
#4020 (comment)

Will revert this once we reached to a solution for it.
  • Loading branch information
ebraminio committed Apr 15, 2020
1 parent 5e4118c commit 829b75f
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 30 deletions.
Expand Up @@ -7,30 +7,29 @@
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.CastEnabledActivity;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.event.FeedItemEvent;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.util.Flavors;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
* Displays information about a list of FeedItems.
Expand All @@ -42,7 +41,7 @@ public class ItemPagerFragment extends Fragment {
/**
* Creates a new instance of an ItemPagerFragment.
*
* @param feeditems The IDs of the FeedItems that belong to the same list
* @param feeditems The IDs of the FeedItems that belong to the same list
* @param feedItemPos The position of the FeedItem that is currently shown
* @return The ItemFragment instance
*/
Expand Down Expand Up @@ -77,21 +76,31 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
feedItems = getArguments().getLongArray(ARG_FEEDITEMS);
int feedItemPos = getArguments().getInt(ARG_FEEDITEM_POS);

ViewPager2 pager = layout.findViewById(R.id.pager);
ViewPager pager = layout.findViewById(R.id.pager);
// FragmentStatePagerAdapter documentation:
// > When using FragmentStatePagerAdapter the host ViewPager must have a valid ID set.
// When opening multiple ItemPagerFragments by clicking "item" -> "visit podcast" -> "item" -> etc,
// the ID is no longer unique and FragmentStatePagerAdapter does not display any pages.
int newId = ViewCompat.generateViewId();
pager.setId(newId);
pager.setAdapter(new ItemPagerAdapter(this));
pager.setCurrentItem(feedItemPos, false);
pager.setAdapter(new ItemPagerAdapter());
pager.setCurrentItem(feedItemPos);
loadItem(feedItems[feedItemPos]);
pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
loadItem(feedItems[position]);
}

@Override
public void onPageScrollStateChanged(int state) {

}
});

EventBus.getDefault().register(this);
Expand Down Expand Up @@ -164,20 +173,20 @@ private void openPodcast() {
((MainActivity) getActivity()).loadChildFragment(fragment);
}

private class ItemPagerAdapter extends FragmentStateAdapter {
private class ItemPagerAdapter extends FragmentStatePagerAdapter {

ItemPagerAdapter(@NonNull Fragment fragment) {
super(fragment);
ItemPagerAdapter() {
super(getFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}

@NonNull
@Override
public Fragment createFragment(int position) {
public Fragment getItem(int position) {
return ItemFragment.newInstance(feedItems[position]);
}

@Override
public int getItemCount() {
public int getCount() {
return feedItems.length;
}
}
Expand Down
16 changes: 5 additions & 11 deletions app/src/main/res/layout/feeditem_fragment.xml
Expand Up @@ -171,18 +171,12 @@

</LinearLayout>

<de.danoeh.antennapod.view.NestedScrollableHost
android:layout_below="@id/header"
<de.danoeh.antennapod.view.ShownotesWebView
android:id="@+id/webvDescription"
android:layout_width="match_parent"
android:layout_height="match_parent">

<de.danoeh.antennapod.view.ShownotesWebView
android:id="@+id/webvDescription"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="?android:windowContentOverlay" />

</de.danoeh.antennapod.view.NestedScrollableHost>
android:layout_below="@id/header"
android:layout_height="match_parent"
android:foreground="?android:windowContentOverlay" />

<FrameLayout
android:layout_width="match_parent"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/feeditem_pager_fragment.xml
Expand Up @@ -14,7 +14,7 @@
app:navigationIcon="?homeAsUpIndicator"
android:id="@+id/toolbar"/>

<androidx.viewpager2.widget.ViewPager2
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Expand Down

0 comments on commit 829b75f

Please sign in to comment.