Articles of android viewpager

FragmentManager IllegalStateException:没有主机

更新 :当我把nullcheks(片段!= null,getActivity()!= null)崩溃了,无论我能。 我的应用程序正在使用ViewPager (屏幕外限制5)与FragmentStatePagerAdapter与getSupportFragmentManager()初始化。 每个页面都有它自己的碎片和后台堆栈。 应用程序在启动时崩溃。 问题只出现在preLollipop设备和模拟器上。 使用最新的支持lbrary(也尝试24.0.0 – 相同的结果)Stacktrace: java.lang.IllegalStateException:android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1273)在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268)android.support上没有主机.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:2138)at android.support.v4.app.Fragment.onCreate(Fragment.java:1254)at android.support.v4.app.Fragment.performCreate(Fragment.java :2062)at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051)at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286)at android.support.v4.app。 BackStackRecord.run(BackStackRecord.java:758)at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1632)at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)at android在android.support.v4.view.ViewPager.pop上的.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166) ulate(ViewPager.java:1237)在android.support.v4.view.ViewPager.populate(ViewPager.java:1085)在android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1611)在android.view .View.measure(View.java:16497)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)at android.widget.LinearLayout.measureVertical( LinearLayout.java:695)在android.view.View.measure(View.java:16497)android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)android.widget.LinearLayout.onMeasure(LinearLayout.java:588) )android.widget.FrameLayout.onMeasure(FrameLayout.java:310)在android.widget android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:719)android.view.View.measure(View.java:16497) .RelativeLayout.onMeasure(RelativeLayout.java:455)at android.view.View.measure(View.java:16497)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)at android.widge t.FrameLayout.onMeasure(FrameLayout.java:310)at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)at android.view.View.measure(View.java:16497)at android.view .ViewGroup.measureChildWithMargins(ViewGroup.java:5125)at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)at android.view.View.measure(View.java:16497)at android.view.ViewGroup.measureChildWithMargins( (ViewGroup.java:5125)在android.view.View.measure(View.java:16497)android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)android.widget.FrameLayout.onMeasure(FrameLayout.java:310) )在android.widget.Lineout.measureChildChildChildChildChildChildChildVertical(LinearLayout.java:695)在android.widget.LinearLayout.onMeasure(LinearLayout.java:588)在android.view上的(LinearLayout.java:1404)在android.widget.LinearLayout.measureVertical .View.measure(View.java:16497)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 在android.view.View.measure(View.java:16497)在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java)com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2291) :1912)at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)at […]

如何禁用ViewPager向一个方向滑动

我想只允许用户在一个ViewPager从右向左滑动。 所以一旦他通过一页,他不能回到它。 如何才能做到这一点? 我试过这个解决scheme: public class CustomViewPager extends ViewPager { float lastX = 0; boolean lockScroll = false; public CustomViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public CustomViewPager(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: lastX = ev.getX(); lockScroll = false; return super.onTouchEvent(ev); case MotionEvent.ACTION_MOVE: if […]

有没有一种方法来禁用viewPager滚动到边缘的褪色?

可滚动视图(如ListView)沿着没有内容的边缘呈现淡蓝色效果,并滚动到结尾。 我怎样才能closures效果? 在列表视图我可以使用: setHorizontalFadingEdgeEnabled(false); android:fadingEdge="none" android:requiresFadingEdge="none" 但是在viewPager中没有用处,可以给我一些build议

Android的webview:防止触摸手势传递给父视图

我有一个包含许多子视图的viewpager; 每个子视图都是一个web视图。 每个webview都有一些用户可以与之交互的HTML对象; 例如,可以在滑动手势上工作的幻灯片或用户可以在HTMLcanvas上移动的可拖动的圆圈。 问题是当用户在这些HTML对象上执行一个手势时,viewpager会滚动到下一个视图。 当用户与它们交互时,我希望HTML对象能够工作(viewpager不滚动),当用户在其他地方滑动时viewpager会滚动。 我怎样才能做到这一点? PS我已经在HTML幻灯片的JavaScript中使用event.preventDefault()和event.stopPropagation() ,希望webview不会将触摸事件传递给父视图。

Android导航栏覆盖viewpager内容

我无法阻止系统导航栏遮住我的内容! 我滚动到回收站的最底部,但隐藏在导航栏后面。 这是我的XML布局。 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <include layout="@layout/toolbar"/> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:fitsSystemWindows="true" android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <com.melnykov.fab.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="16dp" app:fab_colorNormal="@color/accent" app:fab_colorPressed="@color/accent_dark" /> 这是您在图片中看到的碎片布局。 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="8dp"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/> </FrameLayout> 我试图添加android:fitsSystemWindows =“true”到每一个布局我可以但没有工作。 其他线程提到添加从栏计算的边际,但这似乎不是正确的解决scheme。 […]

Android – 使用FragmentActivity + Loader来更新FragmentStatePagerAdapter的问题

我试图使用ViewPager的Fragments显示Fragmentsdynamic列表。 有很多关于如何做静态版本的例子。 我的问题是我显示的列表需要dynamic加载,也可以根据用户input(添加/删除)进行更改。 我试图使用自定义的android.support.v4.content.Loader来加载我可以用来build立我的列表的数据集。 在我的设置中一切正常,直到我想要更新适配器,并在此时执行FragmentStatePagerAdapter#notifyDataSetChanged()调用此代码执行(从FragmentStatePagerAdapter ) public void finishUpdate(View container) { if(mCurTransaction != null) { mCurTransaction.commit(); // BANG!!! The exception is thrown mCurTransaction = null; mFragmentManager.executePendingTransactions(); } } 事务提交失败并显示以下消息: java.lang.IllegalStateException: Can not perform this action inside of onLoadFinished 因为在FragmentManagerImpl这个代码被执行: private void checkStateLoss() { if (mStateSaved) { throw new IllegalStateException( "Can not perform this action after […]

在viewpager页面中使用mapview的手势问题

我的应用程序的主界面是一个viewpager,用户只是水平滑动页面到各个页面。 其中一个网页有谷歌地图查看(粘贴在下面)。 我的问题是,如果用户在地图页面上,并使用水平滑动手势,页面滑动到下一页,而不是地图侧面移动。 就好像viewpager正在获取地图前的手势。 如果用户很聪明并开始在对angular线或垂直方向上滑动地图,则地图开始移动,然后手势可以水平地继续。 但我宁愿地图移动,而不是简单的水平滑动手势的页面。 该页面始终可以使用textview滑动。 有什么办法可以做到这一点? 谢谢,加里 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ContentPanel" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/tvMAP" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Map" style="@style/bigtype" /> <com.google.android.maps.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apiKey="mykeygoeshere" android:clickable="true" /> </LinearLayout>

使用工具栏与片段

我正在尝试创build一个viewpager,通过3个不同的片段,每个都有不同的工具栏。 我已经在一个活动之前实现了新的工具栏,并得到它的工作,但我试图让它与碎片工作 这是片段代码 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout resource that'll be returned View rootView = inflater.inflate(R.layout.fragment_home, container, false); mToolbar = (Toolbar) rootView.findViewById(R.id.toolbar_home); if (mToolbar != null) { setSupportActionBar(mToolbar); } mToolbar.setTitle(null); return rootView; } 我用Fragment扩展我的片段,但是我得到错误 Cannot resolve method setSupportActionBar 我不知道如何解决这个问题,如果我删除setSupportActionBar代码将停止使用某些设备? 谢谢

ViewPager屏幕外的页面限制

有没有办法绕过ViewPager的正常行为及其屏幕外页限制 ? 我的ViewPager包含四个fragments ,每个fragments包含图像的ViewPager 。 我遇到的问题是在ViewPager的ViewPager ,创build了两个fragments ,这导致大约20个图像(每个片段大约10个)被同时下载/抓取。 是否可以禁用屏幕外页面限制? 我的目标是仅在selectfragment时才下载图像,或者仅在用户hover图像时下载图像。 一种方法是使用onPageSelected侦听器并设置一个标志,告诉GridViewAdapter是否允许下载图像。 我能想到的另一种HoverListener是在ImageView上设置一个HoverListener ,并只在onHover上下载图像,但是这个监听器只能在4.0及更高版本中使用。 有没有更好的方法来实现这一目标?

在恢复活动时刷新FragmentStatePagerAdapter上的图像

我创build了一个使用FragmentStatePagerAdapter来提供小型图库的活动。 但是,当活动恢复后(例如,从其他活动回来后),我无法恢复它。 每次前两张照片都是空白的,只有当我把两张照片刷到一边后,才会刷新。 我没有find工作的答案(尤其是重写getItemPosition() ) 我这样设置: mPagerAdapter = new PhotosPagerAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.photosViewPager); mPager.setAdapter(mPagerAdapter); 然后我有FragmentStatePagerAdapter类: private class PhotosPagerAdapter extends FragmentStatePagerAdapter{ public PhotosPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return photos.size(); } @Override public Fragment getItem(int position) { ImageFragment f = new ImageFragment(position); return f; } @Override public int getItemPosition(Object object) { […]