Как инициализировать мой фрагмент в основном Activity, используя ViewPager - PullRequest
0 голосов
/ 18 декабря 2018

У меня небольшая проблема с моим ViewPager. Когда я прокручиваю, чтобы изменить фрагмент, процесс занимает больше времени, прежде чем изменить фрагмент.причина в том, что инициализация фрагментов занимает больше времени.

Есть ли у вас какие-либо предложения, которые могут мне помочь?

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

это мой вид пейджерного кода, надеюсь, это поможет.если бы у вас были общие журналы ошибок и ваш код, чем я помог бы вам лучше.

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));


    }
}

}

также проверьте макет ваших фрагментов, они могут использовать некоторые большие изображения, которые могут бытьвызывает проблемы с загрузкой на основной поток пользовательского интерфейса

0 голосов
/ 19 декабря 2018

Очень важно использовать RecycleView вместо ListView, когда у вас много Fragment, и этот фрагмент содержит ListView.

0 голосов
/ 18 декабря 2018

Выполнение слишком большого количества работы с основным потоком может привести к ухудшению работы пользователя.Проблема может быть решена, если вы переместите свою рабочую логику в рабочий поток.

...