Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用ViewPager在主活动中初始化我的片段_Android_Android Fragments_Android Viewpager_Android Tablayout_Android Pageradapter - Fatal编程技术网

Android 如何使用ViewPager在主活动中初始化我的片段

Android 如何使用ViewPager在主活动中初始化我的片段,android,android-fragments,android-viewpager,android-tablayout,android-pageradapter,Android,Android Fragments,Android Viewpager,Android Tablayout,Android Pageradapter,我的ViewPager有个小问题, 当我滚动以更改片段时,在更改片段之前,该过程需要更多的时间。 原因是碎片的初始化需要更多的时间 您有什么建议可以帮助我吗?在主线程上做太多工作可能会导致糟糕的用户体验。 若你们在工作线程上转移你们的工作逻辑,这个问题可能会得到解决。这是我的视图寻呼机代码,我希望它能有所帮助。如果您有共享错误日志和代码,我会以更好的方式帮助您 public class MainActivity extends AppCompatActivity { private ViewP

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


    }
}
public类MainActivity扩展了AppCompatActivity{
私人视页机视页机;
私人按钮下一步;
私人按钮返回;
私人穿行适配器viewPagerAdapter;
专用WormDotsIndicator指示器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
如果(Build.VERSION.SDK_INT<16){
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
}否则{
View decorView=getWindow().getDecorView();
//隐藏状态栏。
int uiOptions=View.SYSTEM\u UI\u FLAG\u全屏显示;
decorView.设置系统兼容性(uiOptions);
//请记住,如果
//状态栏是隐藏的,所以在必要时也隐藏它。
}
setContentView(R.layout.activity_main);
viewPager=(viewPager)findViewById(R.id.viewPager);
next=(按钮)findViewById(R.id.next);
后退=(按钮)findViewById(R.id.back);
指标=(WormDotsIndicator)findViewById(R.id.indicator);
淡出变换=新淡出();
viewPagerAdapter=新的演练适配器(getSupportFragmentManager());
viewPager.setAdapter(viewPagerAdapter);
指示器。设置viewPager(viewPager);
setPageTransformer(true,转换);
}
@凌驾
受保护的void onStart(){
super.onStart();
next.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(viewPager.getCurrentItem()+1<3){
viewPager.setCurrentItem(nextitem(),true);//上一页的getItem(-1)
}
}
});
back.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(viewPager.getCurrentItem()-1>=0){
viewPager.setCurrentItem(previItem(),true);//上一个的getItem(-1)
}
}
});
}
private int nextitem(){
返回viewPager.getCurrentItem()+1;
}
私有项目(){
返回viewPager.getCurrentItem()-1;
}
私有类演练适配器扩展FragmentPagerAdapter{
公共演练指南(FragmentManager fm){
超级(fm);
}
@凌驾
公共片段getItem(int i){
开关(一){
案例0:
演练1第一屏=新演练1();
返回第一屏;
案例1:
演练2 secaondScreen=新演练2();
返回secaondScreen;
案例2:
演练3第三屏幕=新演练3();
返回第三屏幕;
}
返回null;
}
@凌驾
public int getCount(){
返回3;
}
}
私有类淡出实现ViewPager.PageTransformer{
@凌驾
公共页面(查看页面、浮动位置){
page.setTranslationX(-position*page.getWidth());
第页setAlpha(1-数学abs(位置));
}
}
}


还要检查片段布局,它们可能使用了一些较大的图像,这可能会导致在主UI线程上加载问题

当您有许多片段并且该片段包含ListView时,使用RecycleView而不是ListView是非常重要的。

mViewPager.setOffscreenPageLimit(3)
将创建片段,而不会在片段之间滑动时重新创建片段。3是添加到视图寻呼机适配器的片段数。共享一些代码可以帮助更好地理解问题。请解释这是如何解决OP的特定问题的。我相信他们自己也可以找到一个通用的
ViewPager
示例。因为他没有在问题中分享他的代码,所以我无法具体回答他的问题。