如何使用 ViewPager 在主 Activity 中初始化我的片段

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

我的 ViewPager 有一个小问题, 当我滚动更改片段时,该过程在更改片段之前需要更多时间。 原因是片段的初始化需要更多时间。

你有什么建议可以帮助我吗?

在主线程上做太多的工作可能会导致糟糕的用户体验。 如果将工作逻辑转移到工作线程上,问题可能会得到解决。

这是我的查看寻呼机代码,希望对您有所帮助。如果您分享了错误日志和您的代码,我会以更好的方式帮助您。

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


    }
}

}

还要检查您的片段布局,它们可能使用了一些大图像,这可能导致在主 UI 线程

上加载时出现问题

当您有很多 Fragment 并且该 fragment 包含 ListView 时,使用 RecycleView 而不是 ListView 非常重要。