Boris
Boris

Reputation: 101

How to initialize my fragment in the main Activity, using ViewPager

I have a small problem with my ViewPager, When I Scroll to change the fragment, the process takes more time before changing the fragment. the cause is due to the initialisation on the fragments that takes more time.

Have you any suggestion that can help me?

Upvotes: 0

Views: 807

Answers (3)

Boris
Boris

Reputation: 101

It is very Important to use RecycleView instead of ListView when you have many Fragment and that fragment contains ListView.

Upvotes: 0

IO Devs
IO Devs

Reputation: 383

this is my view pager code , I hope it helps . if you had share error logs and your code than i would help you in better way .

public class MainActivity extends AppCompatActivity {

private ViewPager viewPager;
private Button next;
private Button back;
private WalkThroughAdapter viewPagerAdapter;
private WormDotsIndicator indicators;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }else {
        View decorView = getWindow().getDecorView();
       // Hide the status bar.

        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);

        // Remember that you should never show the action bar if the
        // status bar is hidden, so hide that too if necessary.

    }
    setContentView(R.layout.activity_main);
    viewPager = (ViewPager)  findViewById(R.id.viewPager);
    next = (Button) findViewById(R.id.next);
    back = (Button) findViewById(R.id.back);
    indicators = (WormDotsIndicator) findViewById(R.id.indicator);
    FadeOut transformation =new FadeOut();
    viewPagerAdapter = new WalkThroughAdapter(getSupportFragmentManager());
    viewPager.setAdapter(viewPagerAdapter);
    indicators.setViewPager(viewPager);
    viewPager.setPageTransformer(true,transformation);
}

@Override
protected void onStart() {
    super.onStart();
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (viewPager.getCurrentItem() + 1 < 3) {
                viewPager.setCurrentItem(nextitem(), true); //getItem(-1) for previous
            }
        }
    });

    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (viewPager.getCurrentItem() - 1 >= 0) {
                viewPager.setCurrentItem(previtem(), true); //getItem(-1) for previous
            }
        }
    });
}

private int nextitem() {

        return viewPager.getCurrentItem()+1;

}

private int previtem() {

    return viewPager.getCurrentItem() - 1;

}

private class WalkThroughAdapter extends FragmentPagerAdapter{

    public WalkThroughAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {

        switch (i){
            case 0:
                Walkthrough1 firstScreen = new Walkthrough1();
                return firstScreen;

            case 1:
                Walkthrough2 secaondScreen = new Walkthrough2();
                return secaondScreen;

            case 2:
                Walkthrough3 thirdScreen = new Walkthrough3();
                return  thirdScreen;
        }

        return null;
    }

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

private class FadeOut implements ViewPager.PageTransformer{
    @Override
    public void transformPage(View page, float position) {

        page.setTranslationX(-position*page.getWidth());

        page.setAlpha(1-Math.abs(position));


    }
}

}

also check your fragments layout , they might be using some large images which might be causing problems to load on main UI Thread

Upvotes: 1

VIKAS SHARMA
VIKAS SHARMA

Reputation: 84

Doing too much work on the main thread may cause bad user experience. Problem may be solved if you shift your work logic on worker Thread.

Upvotes: 0

Related Questions