【发布时间】:2016-04-20 17:34:57
【问题描述】:
我正在尝试将 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";}}
这是我初始化 ViewPager 的 MainActivity 的代码:
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