Ale*_*xDG 6 android android-fragments android-viewpager
我的应用程序有一个FragmentActivity,并FragmentActivity托管一个Fragment主机a ViewPager.该ViewPager有其子类的适配器FragmentStatePagerAdapater,并且该适配器将覆盖getItem()到返回基于位置的新片段; getCount()设置为始终返回2.
该应用程序工作正常,直到两件事情中的任何一件发生:当ViewPager显示第二个片段时发生旋转,或者如果,onResume()ViewPager被告知滚动到第一个片段以外的页面.据我所知,这些情况是相同的.当这些事件之一发生时,滚动停止,和可见片段是片段的由ViewPager被管理的第二,该onPageScrolled(int, float, int)回调在"0"还是称为与"位置"的参数(它应该是1)和'positionOffset'参数设置为'1'(在文档中承诺的[0,1]范围之外).我在ViewPager代码中做了一些调查,发现该boolean pageScrolled(int xpos)函数是从[0,940](第一页上的0,然后是第二页上的940)范围内的值调用到使用范围内的值调用[ -940,0](第一个为-940,第二个为0).如果ViewPager被重置为认为第二页是第一页,那么这实际上是有意义的(有点),虽然它根本不是我想要的.
ViewPagerFragment(托管ViewPager).MyViewPager只是支持库的ViewPager的复制/粘贴; 我想从其私有方法中打印出一些数据.
public class ViewPagerFragment extends Fragment implements MyViewPager.OnPageChangeListener{
@InjectView(R.id.view_pager) MyViewPager viewPager;
@DebugLog
public ViewPagerFragment() {
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_view_pager, container, false);
ButterKnife.inject(this,view);
Log.d("onCreateView()","ViewPagerFragment = "+this.toString());
return view;
}
@Override
public void onResume() {
super.onResume();
setupPager();
}
void setupPager(){
if(viewPager != null) {
if (viewPager.getAdapter() == null) {
viewPager.setAdapter(new MyFragmentAdapter(getChildFragmentManager()));
}
viewPager.setOnPageChangeListener(this);
viewPager.setPageMargin(40);
}
}
@Override
@DebugLog
public void onDestroyView() {
super.onDestroyView();
viewPager.setOnPageChangeListener(null);
ButterKnife.reset(this);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if(positionOffset == 1f){
Log.d("onPageScrolled","position offset == 1 and position == "+position+". That's bad!");
} else if(position == 1){
Log.d("onPageScrolled","position offset == "+positionOffset+" and position == 1. That's good!");
}
}
public static class MyFragmentAdapter extends FragmentStatePagerAdapter{
public MyFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
@DebugLog
public Fragment getItem(int position) {
return PageFragment.newInstance(position);
}
@Override
public int getCount() {
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
}
我的问题,如果不是暗示的话,是"我做了什么来弄乱我的ViewPager,我该如何解决它?" 删除setRetainInstance()呼叫显然会将事情重置为正常,但随后我在ViewPager中丢失了"地点".删除setRetainInstance()呼叫,然后使用Bundle savedInstanceState保留ViewPager位置也不起作用(如我的帖子顶部所述).
提前致谢!
ViewPager 旋转后似乎有一个错误。
我计算当前页面的scrollX(offset),当一页滚动完成时它总是0。
但旋转后变为1或X(围绕页面宽度,如果页面宽度为940,则为938~9)。
onPageScrolled我在设备旋转时遇到了一些问题,我通过setAdapter再次调用旋转回调(如 )解决了这些问题onConfigurationChanged。
这是一些代码块。Device是我的定制课程。
public void configOnOrientationChange() {
if (Device.isPortrait(getContext())) {
configOnPortraitOrientation();
} else if (Device.isLandscape(getContext())) {
configOnLandscapeOrientation();
}
int currentItem = mViewPager.getCurrentItem();
if (mPagerAdapter != null) {
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setCurrentItem(currentItem);
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |