ViewPager pageSelected无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ViewPager pageSelected无法正常工作相关的知识,希望对你有一定的参考价值。
我正在尝试将ViewPager添加到我的应用程序中,并且它的工作效果不佳。情况就是这样:
- 我启动应用程序,在我的Viewpager的位置0,一切都很好。
- 我向右滚动到位置2,所有仍在工作
- 我滚动到位置3,它是空的(有时)
- 在此之后,如果我回到位置0或3,它总是空的,只是位置1正在工作
我一直认为这是我的代码很多天(我正在使用一个很棒的openGL应用程序,它使用状态进行页面之间的更改,我正在尝试将这些状态调整为ViewPager)。但是今天我试图改变布局的位置,然后我再次看到那个不工作的是中间的(这是旧位置0)。所以我真的认为问题在于我是如何创建我的Viewpager的。
这是我的代码:
<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的CustomAdapter:
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";}}
这是我的MainActivity的代码,我初始化我的ViewPager:
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);
这将仅加载所有页面一次,因此您必须评估在加载时是否加载所有页面是否重要。
以上是关于ViewPager pageSelected无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章