Android 如何使用ViewPager在主活动中初始化我的片段
我的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
您有什么建议可以帮助我吗?在主线程上做太多工作可能会导致糟糕的用户体验。
若你们在工作线程上转移你们的工作逻辑,这个问题可能会得到解决。这是我的视图寻呼机代码,我希望它能有所帮助。如果您有共享错误日志和代码,我会以更好的方式帮助您
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
示例。因为他没有在问题中分享他的代码,所以我无法具体回答他的问题。