ViewPager pageSelected无法正常工作

问题描述 投票:2回答:1

我正在尝试将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");
}
android xml view opengl-es android-viewpager
1个回答
2
投票

我不知道为什么会这样,但如果你第一次看到他们是对的但不是以下时间,你不能尝试:

viewPager.setOffscreenPageLimit(2);

这将仅加载所有页面一次,因此您必须评估在加载时是否加载所有页面是否重要。

© www.soinside.com 2019 - 2024. All rights reserved.