Android ViewPager pageSelected工作不正常
我正在尝试将ViewPager添加到我的应用程序中,但效果不太好。情况就是这样:Android ViewPager pageSelected工作不正常,android,xml,view,opengl-es,android-viewpager,Android,Xml,View,Opengl Es,Android Viewpager,我正在尝试将ViewPager添加到我的应用程序中,但效果不太好。情况就是这样: 我在Viewpager的0位置启动应用程序,一切正常 我向右滚动到位置2,所有部件仍在工作 我滚动到位置3,它是空的(有时) 在此之后,如果我回到位置0或3,它总是空的,只有位置1起作用 我一直认为这是我的代码(我正在使用一个很棒的openGL应用程序,它使用状态在页面之间进行更改,我正在尝试将这些状态调整为ViewPager)。但是今天我试图改变我的布局的位置,然后我又看到一个不起作用的是中间的位置(原来的位
- 我在Viewpager的0位置启动应用程序,一切正常
- 我向右滚动到位置2,所有部件仍在工作
- 我滚动到位置3,它是空的(有时)
- 在此之后,如果我回到位置0或3,它总是空的,只有位置1起作用
<RelativeLayout
android:id="@+id/myApp_root"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<com.android.myApp3d.ui.GLRootView
android:id="@+id/gl_root_view1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.android.myApp3d.ui.GLRootView
android:id="@+id/gl_root_view2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.android.myApp3d.ui.GLRootView
android:id="@+id/gl_root_view3"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.view.ViewPager>
<View android:id="@+id/gl_root_cover_myApp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fafafa"
/>
</LinearLayout>
</RelativeLayout>
下面是我初始化ViewPager的主要活动的代码:
public class CustomPagerAdapter extends PagerAdapter {
private Context mContext;
private static final String TAG = "CustomPageAdapter";
public CustomPagerAdapter(Context context) {
mContext = context;
}
@Override
public Object instantiateItem(ViewGroup collection, int position) {
int resId = 0;
switch (position) {
case 0:
resId = R.id.gl_root_view1;
break;
case 1:
resId = R.id.gl_root_view2;
break;
case 2:
resId = R.id.gl_root_view3;
break;
}
return collection.findViewById(resId);
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
collection.removeView((View) view);
}
@Override
public int getCount() {
return 3;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public CharSequence getPageTitle(int position) {
return "something";}}
public void initView() {
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setActionBar(mToolbar);
setToolbar(mToolbar);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mViewPager.setAdapter(new CustomPagerAdapter(this));
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
setGLRootView(position);
getGLRoot().lockRenderThread();
showScreen(position);
getGLRoot().unlockRenderThread();
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
public void showScreen(int position) {
if (position > 2) {
position = 1;
}
switch (position) {
case 0:
startMusicPage();
break;
case 1:
startImagePage();
break;
case 2:
startVideoPage();
break;
default:
break;
}
mToolbar.setTitle(getResources().getStringArray(
R.array.title_array_nav_items)[position]);
mToolbar.setNavigationContentDescription("drawer");
}
我不知道为什么会发生这种情况,但如果你第一次看到他们是对的,但不是在接下来的几次,你不能尝试:
viewPager.setOffscreenPageLimit(2);
这将只加载一次所有页面,因此您必须评估在加载时加载所有页面是否重要。它起作用了!谢谢你,伙计,你让我开心!