Search code examples
androidandroid-fragmentsandroid-viewpager

viewpager does not allow to swipe left


So if I have three Fragments A,B, and C. So when I launch Fragment B I want viewpager to let me swipe from LEFT to RIGHT and it should take me back to Fragment A, but viewpager, by default lets me swipe from RIGHT to LEFT to go to Fragment A.

So basically I want viewpager to let me swipe from LEFT to RIGHT and not from RIGHT to LEFT.

Also I tried: viewpager.setRotationY=180 That does let me do what I want but all the contents in my Fragments get flipped upside down.

The adapter I am using:


import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import org.jetbrains.annotations.NotNull;

public class Adapter  extends FragmentPagerAdapter {

    public Adapter(FragmentManager fragmentManager){
        super(fragmentManager);

    }
    @NonNull
    @NotNull
    @Override
    public Fragment getItem(int position) {
        if(position==0){

            return new SettingsFragment();
        }
        if(position==1){

            return new BlankFragment();
        }
        if(position==2){
            return new VersionFragment();
        }
            return null;
        }


    @Override
    public int getCount() {
        return 3;
    }
}

The activity where I use the adapter:


public class SettingsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        Fragment fr=new Fragment();
        getSupportFragmentManager().beginTransaction().addToBackStack(null).add(fr,"settings_fragment").commit();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                ViewPager viewPager=findViewById(R.id.ViewPager);
                viewPager.setCurrentItem(1);
                viewPager.setAdapter(new Adapter(getSupportFragmentManager()));
                viewPager.setOffscreenPageLimit(1);

            }
        });


    }
}

Solution

  • I think your code is misleading you, because you using viewPager.setCurrentItem(1); before setAdapter(...) which you ViewPager will not go to item 1 as you expected.

    So, try put that viewPager.setCurrentItem(1); after setAdapter(...)