Articles of android viewpager

加载第一个Fragment后,ViewPager调用setUserVisibleHint

在我的应用程序中,我有一个ViewPager,里面包含了许多带有碎片的可滑动Tab。 我使用setUserVisibleHint方法来检测Fragment何时进入屏幕。 当用户在选项卡之间滑动时这很好用,但在第一次加载时不起作用。 要运行方法中的代码,我必须向左滑动,然后回到第一个Fragment因为在onCreateView方法之前调用了setUserVisibleHint方法。 在第一个Fragment可见之后,你有什么想法可以运行这段代码吗? ViewPager还有其他的方法吗?

ViewPageranimation淡入/淡出而不是幻灯片

我从这里得到了FragmentBasics的例子。 有没有办法使ViewPageranimation只是淡入淡出,而不是左右滑动? 我一直在用PageTransformer尝试一些东西,但没有成功,我仍然可以看到它滑动。 所以我想我需要以某种方式强制它的位置保持放置,而滑动我的手指只影响阿尔法。 public class SecondActivity extends Activity { SectionsPagerAdapter mSectionsPagerAdapter; ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // Create the adapter that will return a fragment for each of the three // primary sections of the activity. mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager()); // Set up the ViewPager with the sections adapter. […]

Android的CoordinatorLayout + AppbarLayout + Viewpager始终滚动

我有一个经典的布局,顶部有一个工具栏,下面有一个TabLayout,还有一个ViewPager切换TabLayout的选项卡。 当ViewPager中的内容是可滚动的时,工具栏应该不可见,并且当TabLayout到达顶端时应该跟随并粘住。 所有这些在我当前的代码中都是很好的,除了无论ViewPager内容的大小如何,ToolBar总是可以滚动的。 看到我的代码如下。 任何关于如何解决这个问题的精彩想法? <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/primary" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.ToolBar" app:layout_scrollFlags="scroll|enterAlways" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:scrollbars="horizontal" app:tabIndicatorColor="@color/black_text" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/tabs_activity_view_pager" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> 编辑: 我可以看到viewPager的高度与整个根视图的高度相同。 这可能是intentded,因为appbar_scrolling_view_behavior确实似乎添加了顶部和底部的偏移量。 它看起来很奇怪,因为它总是会滚动工具栏和tabbar。

SwipeRefreshLayout + ViewPager,仅限水平滚动?

我在我的应用程序中实现了SwipeRefreshLayout和ViewPager ,但是有一个很大的麻烦:每当我要向左/向右滑动来切换页面时,滚动过于敏感。 向下轻扫一下也会触发SwipeRefreshLayout刷新。 我想设置水平滑动开始的限制,然后强制水平,直到刷卡结束。 换句话说,当手指水平移动时,我想取消垂直翻转。 这个问题只发生在ViewPager ,如果我向下滑动并触发SwipeRefreshLayout刷新function(显示条),然后水平移动我的手指,它仍然只允许垂直滑动。 我试图扩展ViewPager类,但它根本不工作: public class CustomViewPager extends ViewPager { public CustomViewPager(Context ctx, AttributeSet attrs) { super(ctx, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean in = super.onInterceptTouchEvent(ev); if (in) { getParent().requestDisallowInterceptTouchEvent(true); this.requestDisallowInterceptTouchEvent(true); } return false; } } 布局xml: <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/viewTopic" android:layout_width="match_parent" android:layout_height="match_parent"> <com.myapp.listloader.foundation.CustomViewPager android:id="@+id/topicViewPager" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v4.widget.SwipeRefreshLayout> 任何帮助将不胜感激,谢谢

用片段replaceViewPager – 然后回溯

我有一个活动,最初托pipe一个ViewPager,连接到一个FragmentPagerAdapter。 当用户点击ViewPager的子片段中的一个项目时,我正在使用FragmentTransaction来将一个空的容器视图replace为一个我想要导航到的新Fragment。 如果我在事务上使用addToBackStack(),提交事务,然后导航回来,我不返回到ViewPager的视图(初始布局)。 如果我不在事务上使用addToBackStack(),请提交事务并返回,应用程序将退出。 看来显然,ViewPager没有被添加到后台堆栈(这并不令人惊讶,因为它本身不是一个片段)。但是我认为默认行为是后退将我带回到那个活动的初始查看(ViewPager)。 根据我读过的内容,似乎可能是因为片段事务正在发生,ViewPager或PagerAdapter会丢失应显示哪个片段的轨道。 我真的很困惑,但我最终创造了一大堆代码覆盖onBackPress和显示和隐藏viewpager视图。 我会认为有一个更简单的方法来使用默认行为来执行适当的导航。 TL;博士 A是Viewpager托pipe的片段。 B是一个新的片段。 当我用BreplaceA,然后按回,我期望回到A,但是这没有发生。 任何意见将不胜感激。 码: 主要活动: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); headingLayout = (RelativeLayout) findViewById(R.id.headingLayout); headingLayout.setVisibility(View.GONE); // Set up the ViewPager, attaching the adapter and setting up a listener // for when the // user swipes between sections. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setPageMargin(8); […]

在ViewPager中区分用户滚动和编程页面更改

我在我的应用程序中有一个android.support.v4.view.ViewPager ,我想区分编程启动的平滑滚动和用户启动的触摸滚动。 我已经看了ViewPager.OnPageChangeListener ,我相信答案可能在那里,但我不知道如何。

屏幕方向更改后,从ViewPager的适配器中销毁项目

所以我在屏幕方向改变之后从ViewPager销毁(移除)一个页面时遇到问题。 我会尝试在下面的行中描述这个问题。 我使用FragmentStatePagerAdapter作为ViewPager的适配器,并使用一个小的界面来描述无限的视图寻呼机应该如何工作。 它背后的想法是,你可以滚动到右侧,直到你到达ViewPager 。 如果您可以从API调用中加载更多结果,则会显示一个进度页面直到结果出现。 一切都很好,直到现在,问题来了。 如果在这个加载过程中,我旋转屏幕(这不会影响基本上是AsyncTask的API调用),当调用返回时,应用程序崩溃给我这个exception: E/AndroidRuntime(13471): java.lang.IllegalStateException: Fragment ProgressFragment{42b08548} is not currently in the FragmentManager E/AndroidRuntime(13471): at android.support.v4.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:573) E/AndroidRuntime(13471): at android.support.v4.app.FragmentStatePagerAdapter.destroyItem(FragmentStatePagerAdapter.java:136) E/AndroidRuntime(13471): at mypackage.OutterFragment$PagedSingleDataAdapter.destroyItem(OutterFragment.java:609) 在库的代码中挖了一点后,似乎在这种情况下,片段的mIndex数据字段小于0 ,这引发了这个exception。 这是寻呼机适配器的代码: static class PagedSingleDataAdapter extends FragmentStatePagerAdapter implements IEndlessPagerAdapter { private WeakReference<OutterFragment> fragment; private List<DataItem> data; private SparseArray<WeakReference<Fragment>> currentFragments = new SparseArray<WeakReference<Fragment>>(); private ProgressFragment progressElement; private boolean […]

你如何获得ViewPager for Android的当前页码?

我想知道ViewPager的当前页面位置。 我创build一个适配器并将此适配器设置为ViewPager 。 现在我想知道当前页面编号或当前视图的位置,因为我想在该特定页面上启动一些额外的事件。 我用viewPager.setCurrentItem(1); 设置第一项。 有没有类似的方法来获取当前页面?

不显示Viewpager初始片段中的操作项目

在我正在开发的应用程序中,我使用了带有片段的ViewPager,并且每个片段构造了独立于ViewPager中所有其他片段的菜单。 问题是,有时由ViewPager默认初始化(即处于初始状态)的片段没有将其项目填充到操作项目菜单中。 更糟糕的是,这个问题只是间歇性地发生。 如果我滑过ViewPager足够多,以便碎片被迫重新初始化它们,当我向后滑动时,菜单正确填充。 活动代码: package net.solarnz.apps.fragmentsample; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.os.Bundle; import android.support.v13.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; public class FragmentSampleActivity extends Activity { private ViewPagerAdapter mViewPagerAdapter; private ViewPager mViewPager; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (mViewPagerAdapter == null) { mViewPagerAdapter = […]

如何更改SlidingTabLayout的文本颜色?

我做了一个使用ActionBarCompat的应用程序 我使用SlidingTabLayout类创build了选项卡。 这个class是这样的: SlidingTabLayout.java 但我不能改变标签的颜色… 我的viewpager片段是这样的: <swmovil.fyb.SlidingTabLayout android:id="@+id/mTabs" android:layout_width="match_parent" android:layout_height="48dip" /> <android.support.v4.view.ViewPager android:id="@+id/mPager" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1" android:background="@color/white" /> 该应用程序工程很好,但我不能改变标签的颜色文字 … 看到下面的例子后我做了应用程序: rudsonlive /导航抽屉ViewPager-ActionBarCompat 我怎样才能改变标签文本的文字颜色? 谢谢 !!!