Articles of android viewpager

如何使FAB避免在ViewPager中移动,但是成为片段中的一部分?

背景 根据材料devise指南( 这里 ),如果您使用一个具有FAB(浮动操作button)的ViewPager作为片段,FAB不应该作为片段的一部分移动,而是消失或被另一个replace,或者以其他方式animation。 总之,而不是这个: https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0B6Okdz75tqQsNVRkV3FZMktvMWc/components-buttons-fab-behavior_06_xhdpi_009.webm 你应该做这个: https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0B6Okdz75tqQsVlhxNGJCNTEzNFU/components-buttons-fab-behavior_04_xhdpi_009.webm 问题 我没有看到任何示例或教程是什么是最好的方式来执行此操作。 我的意思是,在ViewPager中为每个片段(或其中的一些片段)设置一个FAB,而每个片段都将由其片段(逻辑及其外观)控制,但FAB在滑动时不会作为片段的一部分真正移动在ViewPager中的片段之间。 即使作为示例应用程序,我也不会在任何地方看到此行为。 联系人应用程序对于这两个片段都具有相同的FAB,并且拨号程序正在移动FAB。 甚至有使用不良行为的应用程序(如Solid-Explorer)。 在YouTube上,有一个FAB(在“帐户”片段),但它在标题上,所以它可能会在那里。 这个问题 你应该如何执行正确的行为? 你真的把FAB作为活动的一部分而不是碎片吗? 有没有关于这个的教程和/或样品? 也许,当ViewPager开始滚动时,我可以分离FAB,并将其附加到活动,在滚动的同时生成animation,滚动完成后,我可以隐藏它并显示另一个片段?

Viewpager溢出协调器布局内的屏幕

我试图使用devise支持库来实现选项卡 。 问题是viewpager重叠工具栏和tablayout当我删除属性 app:layout_behavior="@string/appbar_scrolling_view_behavior" 的观点。 viewpager与工具栏和tablayout重叠 当我添加属性viewpager溢出屏幕。 viewpager溢出屏幕 我只需要viewpager占用tablayout和工具栏后留下的空间,而不是溢出屏幕… 这是我的activity_main.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:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <android.support.design.widget.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabGravity="fill" app:tabMode="fixed" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> 这是我的fragment_1.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <TextView […]

在哪里调用getChildFragmentManager()?

问题 根据Google的文档: 您现在可以将碎片embedded到碎片中。 这对于您想要将dynamic和可重用UI组件放入本身为dynamic且可重用的UI组件的各种情况很有用。 例如,如果使用ViewPager创build左右滑动并占用大部分屏幕空间的片段,则现在可以将片段插入到每个片段页面中。 要嵌套一个片段,只需在要添加片段的片段上调用getChildFragmentManager()即可。 这将返回一个FragmentManager,您可以像使用顶级活动一样使用FragmentManager来创build片段事务。 例如,下面是一些在现有的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 […]

在ViewPager的Swipe上停止Exoplayer

我正在使用ViewPager与单个片段实例,其中我显示的Media文件,如图像,video,audio。 我已经实现了ExoPlayer处理Video和Audio文件。 并Glide的图像。 为了避免内存泄漏,我在ItemViewerFragment.java释放这样的ExoPlayer对象: private void releasePlayer() { if (player != null) { player.release(); player = null; trackSelector = null; simpleExoPlayerView.setPlayer(null); } } @Override public void onStart() { super.onStart(); if (player == null && currentGalleryModel != null) { initializePlayer(); } } @Override public void onResume() { super.onResume(); if (player == null && currentGalleryModel != null) […]

ViewPager里面的页边空白和页面转换器不能正确呈现

我有一个内置碎片的视图。 我使用类似于例如 PageTransformer转换中的ViewPager余量 和填充,以便您可以看到当前正在查看的片段两侧的片段的淡出边缘。 但问题是viewpager首次启动时,任何一方的碎片都不会褪色和缩小。 即我的ZoomOutPageTransformer的transformPage方法不会被调用,直到你开始滑动,所以最初的离页右/左或任何视图看起来不正确,然后“跳跃”看完一次刷卡。 任何想法,我可以使它正确呈现,所以如,如果我打电话 myViewPager.setCurrentItem(1) – 或者任何东西,页面的边将被适当的缩小。 我怎样才能让viewpager正确渲染zoomoutpagetransformer应用到“屏幕外”片段?

停止安装Android的所有视图

我目前正在开发一款powershell使用ViewPager Widget的平板电脑应用程序。 我也同时在屏幕上看到了多个Viewpage。 现在我遇到以下问题:如果一个ViewPager滚动到下一个/上一个页面,它(当然)必须重新计算它的布局和添加/删除视图。 我注意到, requestLayout直到查看层次结构的顶部,因此使平板电脑屏幕上的所有视图无效(这是很多!)。 这是非常昂贵的 。 我现在的问题是:是否有可能围绕ViewPager实现一个框架,它执行初始布局,然后不向布局请求向上传递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 […]

ViewPagerindicator&actionbarsherlock不兼容TitlePageIndicator

我注意到最新版本的ViewPagerIndicator支持ICS风格的分频器,我试图解决这个问题和解决scheme,但不pipe我做什么,我都无法得到分频器显示在我的选项TitlePageIndicator的操作栏上。 我添加了IcsLayout作为容器,放置divider,showDividers和其他属性,但我仍然没有得到任何东西。 这是我的布局(奇怪的是,如果我切换IpsLayout的viewpager指标之一,应用程序崩溃): <com.actionbarsherlock.internal.widget.IcsLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.sosick.android.brink" android:layout_width="match_parent" android:divider="#ffffff" android:showDividers="middle" android:dividerPadding="8dp" android:dividerHeight="10dp" android:layout_height="match_parent" android:orientation="vertical" > <com.viewpagerindicator.TitlePageIndicator android:id="@+id/tpi_header" android:layout_width="match_parent" android:layout_height="wrap_content" textColor="@color/text_light" android:background="@drawable/ab_stacked_solid_brink" app:topPadding="10dp" app:footerPadding="15dp" app:footerColor="#a4ded7" app:footerIndicatorHeight="2dp" app:footerIndicatorStyle="underline" app:footerLineHeight="2dp" app:selectedBold="false" /> <android.support.v4.view.ViewPager android:id="@+id/vp_pages" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </com.actionbarsherlock.internal.widget.IcsLinearLayout>

Android:ViewPager FragmentStatePagerAdapter获取当前视图

问 :如何获取ViewPager FragmentStatePagerAdapter的当前视图? 我花了将近24小时的时间在这个地方search适合的解决scheme。 获得现在的位置很简单,我已经知道了。 这是获取当前视图 。 FragmentStatePagerAdapter是必需的,而不是PagerAdapter 。 此解决scheme通过instantiateItem(View container, int position)build议setTag和findViewWithTag 。 这是为PagerAdapter。 但是在FragmentStatePagerAdapter , instantiateItem的ViewGroup参数不是 View param: instantiateItem(**ViewGroup** container, int position) 所以我希望这不是不可能的,是吗? 请帮忙!

如何将数据提供给PagerAdapter

我正在使用这个例子来使用ViewPager和PagerAdapter 。 但是,我怎么能提供来自像CursorAdapter这样的适配器的数据的PagerAdapter ,我使用CursorLoader加载数据? .setAdapter()上的.setAdapter()只需要一个PagerAdapter 。 然后我想我需要在PagerAdapter绑定CursorAdapter ,但是我找不到这样做的方法。

使用ViewPager + FragmentPagerAdapter处理方向更改

我无法通过ViewPager和FragmentPagerAdapter处理屏幕方向更改。 它在应用程序启动时工作正常,但在方向改变(可能丢失)后viewpager内的片段不可见。 我该如何解决这个问题。 以下是我的活动的结构: 编辑:这是清单文件 <?xml version="1.0" encoding="utf-8"?> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <application android:name="com.test.myapp.NetworkManager.TBVolleyInstance" android:allowBackup="true" android:icon="@drawable/launcher" android:label="@string/app_name" android:theme="@style/CustomActionBarTheme"> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name=".Home" android:label="@string/app_name" android:windowSoftInputMode="adjustNothing" > </activity> <activity android:name=".RouterActivity" android:label="@string/app_name" > <intent-filter android:label="@string/app_name" > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> […]