Articles of android viewpager

Android:ViewPager卡在视图之间

我有一个在碎片之间滑动的ViewPager。 我正在使用FragmentStatePagerAdapter将碎片提供给ViewPager。 如果用户以正常速度向左滑动,然后迅速向右滑动,则可以使ViewPager进入奇怪状态,显示多个碎片。 例如,如果用户在片段A上,然后以正常速度向左滑动到片段B,然后快速向右滑动以返回片段A,然后在屏幕上显示片段A和B. 任何人有什么想法,为什么这是发生或防止它的一个好办法? 以下是它的样子: 这是我在XML中的ViewPager定义: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.company.views.CustomActionBar android:id="@+id/customActionBar" android:layout_width="match_parent" android:layout_height="@dimen/height_actionbar" android:layout_alignParentTop="true"/> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/customActionBar"/> 另外,我logging了我的onPageChangeListener()的输出,注意到当ViewPager卡在视图之间时,报告一个positionOffset为0.这是ViewPager的值,当它从STATE_DRAGGING过渡到STATE_SETTLING到STATE_IDLE时,奇怪的状态: 状态= 0 prevState:2位置:1 positionOffset:0.0 状态= 1 prevState:0位置:1 positionOffset:0.0 state = 2 prevState:1 position:1 positionOffset:0.4069444 状态= 0 prevState:2位置:2 positionOffset:0.0 所以看起来好像ViewPager是把错误的位置报告给我的。 完整的示例代码活动和适配器: public class ActivityBagelProfileViewer extends CustomAbstractFragmentActivity implements CustomActionBarContract, ListenerProgress, ListenerSync { public static final […]

ViewPager中的button滚动到特定页面

我的ViewPager中的一个布局有一个button。 “R.layout.add_site”。 我想要按下button的选项,并滚动到我的具体页面。 我已经可以select滑动到特定的页面,但我想要两个。 现在我确信有办法做到这一点,但由于某种原因,我无法弄清楚。 你会看到我已经做了一个尝试,但只是不知道要调用什么方法,使其滚动到所需的页面。 这是R.layout.main。 这是我的代码。 public class fieldsActivity extends Activity { Button addSiteButton; Button cancelButton; Button signInButton; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // to create a custom title bar for activity window requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.fields); // use custom layout title bar […]

Android PagerAdapter,获取当前位置

我想获得我的PagerAdapter的可见视图的当前位置 我没有看到像getPosition()这样明显的function,我想要一个。 我想在这个位置添加一个对象到它的数组列表中,但是我需要先知道它

RecyclerView项目不会更改

我有一个在TabLayout中重复的片段中的RecyclerView。 我有在RecyclerView中的视图不变的问题。 每个标签上都有一个微调框。 我想在select微调项目时更改数据。 我的情况: 当切换标签 – 项目改变 当在第一个选项卡中的微调器中select另一个值 – 项目没有改变 。 (但是数据在适配器类中是变化的,也就是说,首先在select过程中不是null,那么就是null,但是第一个没有空的数据不会出现,用null代替,用断点find)。 注意:在这种情况下,切换选项卡时,项目会变成前一选项卡中的微调选框选项。 然后它消失并在选项卡中显示当前项目。 当在最后一个选项卡中的微调框中select另一个值 – 项目更改 。 我的浏览器适配器类 public class StudentViewPagerAdapter extends FragmentStatePagerAdapter { private final List<StudentList> mFragmentList = new ArrayList<>(); private final List<Clazz> mFragmentTitleList = new ArrayList<>(); public StudentViewPagerAdapter(FragmentManager fm) { super(fm); } public void addFragment(StudentList fragment,Clazz clazz){ mFragmentList.add(fragment); mFragmentTitleList.add(clazz); } @Override […]

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 […]