Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 pageSelected工作不正常_Android_Xml_View_Opengl Es_Android Viewpager - Fatal编程技术网

Android ViewPager pageSelected工作不正常

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添加到我的应用程序中,但效果不太好。情况就是这样:

  • 我在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的主要活动的代码:

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

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

它起作用了!谢谢你,伙计,你让我开心!