Я пытаюсь добавить ViewPager в свое приложение, и он работает не очень хорошо. это так: -I запускаю приложение, в позиции 0 моего Viewpager, все в порядке. -I прокрутите вправо до положения 2 и все еще работаю -I прокрутите до положения 3, и оно пусто (иногда) -После этого, если я вернусь в позицию 0 или 3, он всегда пуст, только позиция 1 работаетViewPager pageSelected не работает должным образом
Я много дней думал о том, что это мой код (im работает с удивительным приложением openGL, которое использует состояния для изменения между страницами, а Im пытается адаптировать эти состояния к 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>
Это мой CustomAdapter для 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";}}
А вот код моего MainActivity где я inizializate мой 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");
}
Надежда, что кто-то сможет мне немного помочь, я действительно отчаянно пытался это исправить.
It Worked! Спасибо, вы сделали мой день! –