Articles of android viewpager

在哪里调用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中引入毛刺。 我希望实现像下图这样的东西。 这是示例应用程序的链接 ,只是我想要实现的最小化实现。

如何在不使用支持库的情况下实现水平滑动?

如果我不需要为旧版本的android授予支持并且只能使用API​​ 17,那么是否有另一种方法来实现广告宣传的水平滑动(如在gmail中)而不使用viewpager,fragmentactivities(新的API已经有片段。 ..)等摆脱支持库? 我发现横向滑动的所有教程都展示了如何使用支持库和FragmentActivities来完成它。 否则,如果我不能使用他们的本机类和方法,新API的优势是什么?

检测viewpager中的触摸/点击事件

我对Android开发很新,目前我正在使用viewpager,试图了解我如何处理触摸/点击事件。 我整个上午都在寻找答案,我似乎无法find任何有助于我的事情。 基本上我有一个包含5个片段的viewpager,它们都使用相同的布局。 我想要做的就是能够检测静止视图上何时有敲击/触摸(我不希望在拖动视图时发生任何检测)。 从我收集的内容来看,ViewPager默认拦截所有触摸事件似乎存在问题。 我相信这可以通过使用: myPager.requestDisallowInterceptTouchEvent(true); 起初我涉足OnTouchListener并尝试记录onTouch方法是否被击中 – 它似乎没有。 我也看到GestureDetector类作为这个问题的解决方案被抛出了很多但坦率地说我感到不知所措,我不确定我应该在这里使用哪些类/接口。 我想做的就是在使用ViewPager时选择简单的触摸/点击事件。 目前我正在使用Android开发者网站的animation教程代码的修改版本。 这是我在MainActivity.java文件中的内容: package com.example.pbinteractive; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; public class MainActivity extends FragmentActivity { /** * The number of pages (wizard steps) to show in this demo. */ private static final int NUM_PAGES […]