Reputation: 101
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
Reputation: 101
It is very Important to use RecycleView instead of ListView when you have many Fragment and that fragment contains ListView.
Upvotes: 0
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
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