Articles of android viewpager

FrameLayout.onMeasure()中的NullPointerException

编辑:我创建了一个Github项目,崩溃的方式与我的应用程序完全相同。 你可以在这里find它 编辑:因为我调试了这个并尝试了各种更改,我意识到我发布的原始代码并不真正相关,所以我删除了它: 我有一个Activity可以在3个不同的Fragment之间切换,当用户按下3个IconButton的一个时,我已经在自定义布局中插入ActionBar,比如在各种模式之间切换: 当我第一次启动应用程序(已卸载它)时,我默认为Globe模式。 Globe模式在ViewPager有几个片段,其中大多数片段是android.support.v4.app.ListFragment子类。 我在主Activity的onCreate方法中创建了所有8个选项卡。 这按预期工作,一切都正常加载。 当我进入“配置文件”模式(通过单击“脸部”图标按钮)时,我可以登录应用程序,并查看我的个人资料。 这也按预期工作,一切正常加载。 当我再次从Android Studio 推送APK时 ,由于我现在已登录(已保存的首选项),因此默认为“朋友提要”模式(两个人手牵着手)。 我可以将模式切换到配置文件,一切都按预期工作,但是当我切换到Globe模式时,它在Android代码中崩溃: 08-14 14:43:22.744 28804-29323/com.trover E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.trover, PID: 28804 java.lang.NullPointerException at android.widget.FrameLayout.onMeasure(FrameLayout.java:309) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 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 com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) at android.view.View.measure(View.java:16497) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java: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 android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) […]

ViewPager中的片段按钮触发错误引用上的onClickListener

抱歉我的愚蠢标题,我将在下面清楚地描述: 情况 我有一个ViewPager里面有4个OnBoardingFragment 。 每个Fragment具有完全相同的布局,从同一个xml文件中inflated 。 这个布局包含一个我称之为btnNext的Button ,我为它设置了OnClickListener 。 我的PagerAdapter的函数getItem @Override public Fragment getItem(int position) { String title, description, button; int resource; boolean end = false; switch (position) { case 0: title = context.getString(R.string.on_boarding_title_1); description = context.getString(R.string.on_boarding_description_1); resource = R.drawable.on_boarding_bg_0; button = context.getString(R.string.on_boarding_button_1); break; case 1: title = context.getString(R.string.on_boarding_title_2); description = context.getString(R.string.on_boarding_description_2); resource = R.drawable.on_boarding_bg_1; […]

在哪里调用getChildFragmentManager()?

问题 根据谷歌的文档: 您现在可以将片段嵌入片段中。 这对于您希望将动态和可重用的UI组件放入自身动态且可重用的UI组件的各种情况都很有用。 例如,如果使用ViewPager创建向左和向右滑动并占用大部分屏幕空间的片段,则现在可以将片段插入到每个片段页面中。 要嵌套片段,只需在要添加片段的片段上调用getChildFragmentManager()。 这将返回一个FragmentManager,您可以像通常从顶级活动那样使用它来创建片段事务。 例如,这里有一些代码可以在现有的Fragment类中添加一个片段: Fragment videoFragment = new VideoPlayerFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.id.video_fragment, videoFragment).commit(); 所以我(例如) TestFragment看起来像: public class TestFragment extends Fragment { private View mFragmentView; private FrameLayout mFrameLayout; public HistoryFragment() { super(); } @Override public View onCreateView(LayoutInflater pInflater, ViewGroup pViewGroup, Bundle pBundle) { mFragmentView = pInflater.inflate(R.layout.fragment_layout, pViewGroup, false); mFrameLayout = […]

Android TabPage指标内容包装问题

我遇到了ViewPager的另一个问题,我现在无法用现有的知识解决它。 我有TabPageIndicator和ViewPager,在每个标签上,我都显示文字。 这是简单的textView: 我希望选项卡中的文本始终是一行,并且始终是整个文本,而不是椭圆形,没有包装,不超过1行。 用户需要能够全部阅读… 但我不能这样做,我尝试了不同的选项,但我仍然遇到一些问题 – 文本不仅仅有一行,而且只显示第一行,或者只显示部分文本。 你有过类似的经历吗? 任何帮助表示赞赏 编辑一: 我相信问题在这里: @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { final int widthMode = MeasureSpec.getMode(widthMeasureSpec); final boolean lockedExpanded = widthMode == MeasureSpec.EXACTLY; setFillViewport(lockedExpanded); final int childCount = mTabLayout.getChildCount(); if (childCount > 1 && (widthMode == MeasureSpec.EXACTLY || widthMode == MeasureSpec.AT_MOST)) { if (childCount > 2) […]

ListFragment中的自定义ArrayAdapter

我正在尝试创建一个自定义ArrayAdapter用于我的ListFragment 。 现在ListFragment没有显示任何内容,除了TextView说它是什么片段数。 我在我的适配器的getView()方法中放了一个断点,它没有被调用。 我搜索了无法调用的原因,有些人似乎认为我的ListView被隐藏了,所以我尝试将layout_height更改为wrap_content ,但这不起作用。 此外,我一直在关注此开发人员页面中的代码: http : //developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html ListFragment: public class HomeFragment extends ListFragment implements FragmentTitle { private int mNum = 0; private String mTitle = “Home”; private ListView mListView; private MyArrayAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt(“num”) : 1; InfoContainer temp = new […]

从Layouting我的所有视图中停止Android

我目前正在开发一款强烈使用ViewPager Widget的平板电脑应用。 我也同时在屏幕上有多个Viewpagers。 现在我遇到了以下问题:如果一个ViewPager滚动到下一个/上一个页面,它(当然)必须重新计算它的布局并添加/删除视图。 我注意到requestLayout调用直到View Hierarchy的顶部,因此在Tablet屏幕上使我的所有视图无效(这很多!)。 这非常昂贵 。 我现在的问题是:是否有可能围绕ViewPager实现一个Frame,它执行初始Layout,然后不会在View Hierarchy上传播布局请求,因为我知道在初始布局之后,框架保持相同的大小并且将会不变。 我提出了下面的框架,但它不能很好地工作,因为它不能100%的时间工作。 public class MyFrame extends FrameLayout { // VARIABLE CONTROLLING THE DISPATCH OF THE LAYOUT // REQUEST UP THE VIEW HIERARCHY private boolean doLayout = true; public MyFrame(Context context) { super(context); doLayout = true; } @Override public void requestLayout() { if (doLayout) // DO THE […]

如何在RecyclerView中保留ViewPager状态?

我的RecyclerView包含许多ViewPagers。 每个ViewPager中的页面数是常量(2)。 我使用PagerAdapter。 当我滚动我的RecyclerView时,ViewPagers将丢失其状态并重置为第1页。 我想知道如何保留每个ViewPager的最后一个选定页面。 例如:1)我在第一个ViewPager中滚动到第2页2)我将RecyclerView滚动到底部,我的第一个ViewPager离开了屏幕。 3)我滚动到ViewPager的顶部,因此我的第一个ViewPager再次加载。 4)我的第一个ViewPager被设置为第一页而不是我最后滚动到的第2页。 RecyclerView中有很多ViewPagers,我想保留所有状态,无论是否因为RecyclerView而重新加载。 如何解决这个逻辑?

Viewpager – 尝试catch处理,但指针索引超出范围

我收到以下exception Exception java.lang.IllegalArgumentException: pointerIndex out of range android.view.MotionEvent.nativeGetAxisValue (MotionEvent.java) android.view.MotionEvent.getX (MotionEvent.java:2141) android.support.v4.view.ViewPager.onInterceptTouchEvent (ViewPager.java:2092) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2254) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2711) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2400) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2711) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2400) android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2711) android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2400) com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:416) com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1837) android.app.Activity.dispatchTouchEvent (Activity.java:3154) com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:378) android.view.View.dispatchPointerEvent (View.java:10177) android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:4634) android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:4502) android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3953) android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4006) android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3972) android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:3980) android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:3953) android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4006) android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:3972) […]

始终为索引0和1调用Viewpager Adapter getItem

我只是想知道viewpager及其适配器的正常行为是否始终为索引0和1调用getItem()方法,即使我立即设置了当前位置。 这是我的代码: mNewsPagerAdapter = new NewsDetailPagerAdapter(getChildFragmentManager()); mNewsPagerAdapter.updateNewsList(news); mViewPager = (ViewPager) mView.findViewById(R.id.horizontal_view_pager); mViewPager.setPageMargin(2); mViewPager.setPageMarginDrawable(R.color.black); mViewPager.setAdapter(mNewsPagerAdapter); mViewPager.setCurrentItem(mCurrentPositionPager, false); 如果我使用此viewpager从概览活动切换到我的详细活动,则适配器始终调用位置0和1的getItem()方法,然后mOriginalPosition及其邻居的位置的getItem()方法。 我想知道这是否是正确的行为,或者我错过了以正确的方式实现它的东西。 谢谢你的帮助 :) 编辑:添加了我的适配器代码 public class NewsDetailPagerAdapter extends FragmentStatePagerAdapter { private SparseArray mPageReferenceMap = new SparseArray(); private ArrayList mNewsList; public NewsDetailPagerAdapter(FragmentManager fm) { super(fm); } /** * Setzt die neuen News. **/ public void updateNewsList(ArrayList list) { mNewsList […]

使用View Pager进行循环滚动

我们需要将旋转轮与滑动图像进行对比 。 我已经使用了ViewPager但是在360度旋转之后 我必须从X = 0开始滚动ViewPager 。 是否有任何ViewPager在滚动到最后位置后从第一页开始? 我使用setScrollX来滚动ViewPager ,它也会在旋转animation中引入毛刺。 我希望实现像下图这样的东西。 这是示例应用程序的链接 ,只是我想要实现的最小化实现。