Articles of android fragments

半透明/透明状态栏+ CoordinatorLayout +工具栏+片段

我有以下设置: 我正在使用AppCompat MainActivity,包含一个片段并有一个工具栏,在向下滚动时隐藏 Fragment与RecyclerView 所有适合屏幕的视图都在xml布局中具有相应的android:fitsSystemWindows=”true” 问题是,在这种情况下我无法使状态栏透明。 我所做的是: 创建活动并调用setContent 然后我尝试调整活动以编程方式获得如下的半透明工具栏: @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void themeNavAndStatusBar(Activity activity) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; Window w = activity.getWindow(); w.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); w.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); w.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); w.setNavigationBarColor(activity.getResources().getColor(android.R.color.transparent)); w.setStatusBarColor(activity.getResources().getColor(android.R.color.transparent)); } 用片段替换活动( @+id/frame_container )中的占位符 在这种情况下,状态栏是纯色的,并且未在其下方绘制视图…为什么? 我想要的是 我想要一个工具栏,它滚动屏幕并完全隐藏,而此工具栏下面的内容应该适合屏幕,并在透明导航栏后面绘制。 布局 这是我的主要活动: 这是我的片段,将放在主要活动中: 编辑 – 截图 我使用浅色/深色基本主题并手工制作主题(因为用户可以选择任何颜色作为主要/强调颜色),所以不要介意工具栏是白色的(它是默认的主题背景颜色和原色)。 我还添加了一个黑色边框,以便您看到活动结束的地方…… 第一个屏幕截图:显示工具栏,没有滚动任何内容 第二个屏幕截图:我刚刚开始滚动=>工具栏现在应该滚动 第三个屏幕截图:主要内容现在应滚动到导航栏下方… 最后,我当然会让工具栏和导航栏半透明,以获得更好的视觉效果……

在重新创建父片段之后获取对子片段的引用

从Android 4.2开始,Android支持嵌套片段 。 doc没有给出关于嵌套Fragment生命周期的大量解释,但从经验来看,它们的生命周期看起来与“常规” Fragments非常相似。 看起来有一个很大的区别:当调用父Fragment onCreate方法时,不会恢复子Fragments 。 因此,似乎无法保存/恢复对特定Fragment的引用: 使用getChildFragmentManager.findFragmentByTag(String)始终在父Fragment onCreate(Bundle)返回null ,因为mActive为null 。 使用putFragment / getFragment导致NullPointerException因为getFragment查找null mActive ArrayList的大小。 所以,我的问题很简单。 是否有正确的方法来检索父Fragment onCreate方法中对子Fragment的引用?

在Android 3.0+上使用`onPrepareOptionsMenu()`

我很好奇如何(如果有的话) onPrepareOptionsMenu(Menu) (以及扩展名, onPreparePanel(int, View, Menu) )在针对API 11或更高版本时在Android 3.0+上使用。 我的想法如下: Activity的ActionBar从onCreateOptionsMenu(Menu)接收其内容,您可以在其中充气XML菜单资源,直接添加项目或两者的某种组合。 活动的任何片段也将接收此呼叫,并可选择执行相同操作。 要更新ActionBar上的项目,您可以保持Menu实例或调用invalidateOptionsMenu() ,然后再次调用onCreateOptionsMenu(Menu) 。 因此, onPrepareOptionsMenu(Menu)仍然只能支持那些不针对API 11或更新版本的遗留应用程序? 调用getActionBar().hide()和getActionBar().show()触发对onPrepareOptionsMenu(Menu)的调用吗? 添加或删除片段会以某种方式触发此操作吗?

Android webview下拉菜单在Android 4.x设备上无效

Android 4.x设备上的一个WebView出现问题。 Android应用有一个包含片段的Tabhost 。 其中一个片段包含webview。 显示的页面有一个下拉菜单,如下所示: Testname 1 Testname 2 Testname 3 现在,当我使用带有Android 4.1.1的Galaxy S3(或任何其他Android设备,我可以动手)打开我的应用程序时,我可以选择“Testname 1”,然后选择“Testname 2”,依此类推。 在Galaxy Nexus上(在运行Android 4.1.1,4.1.2和4.2的不同设备上确认)当我尝试选择UI时阻止的东西。 在我切换到另一个选项卡并突然返回到webview选项卡后,UI最终更改为先前选择的项目。 知道是什么导致了这个或我如何为Galaxy Nexus解决这个问题? 重要更新:我可以将其跟踪到Tabhost 。 当webview在tabhost中时它不起作用,当它不起作用时。 这可能与此问题有关 。

在片段替换时显示/隐藏Android软键盘

我有一个片段活动。 让我们说一个带有列表的列表片段。 现在我想让用户添加一个东西,所以我使用FragmentManager用一个带有EditText的插入片段替换列表片段。 EditText具有焦点,光标闪烁。 但软键盘无法打开。 反之亦然:如果用户输入了新内容并将其添加到列表中,我将插入片段替换为列表片段。 但是,虽然没有EditText,键盘也不会关闭。 实现这个的正确方法是什么? 我不敢相信我必须在所有过渡时手动显示和隐藏键盘?!

没有视图的片段在配置更改时崩溃

我有一个UI,我需要在横向模式下显示Fragment (带有视图),但不能在纵向模式下显示。 在纵向模式下,它应该仍然可用,但会使用ListPopupWindow显示其结果。 我想我可以通过使用标签来处理景观布局,同时以编程方式创建片段(如果它没有启动)(在我们是纵向的情况下)。 只要您从横向开始,这样就可以正常工作,如果您以纵向方式开始以编程方式创建片段,则在您尝试将片段附加到布局时旋转模拟器时,应用程序将崩溃: java.lang.IllegalStateException:Fragment没有创建视图。 在android.app.Activity.onCreateView(Activity.java:4095) Fragment.isInLayout()的文档似乎暗示它应该能够以这种方式处理它: 如果布局通过标记作为活动视图层次结构的一部分包含,则返回true。 当通过标记创建片段时,这将始终为真,除非旧片段从先前状态恢复且未出现在当前状态的布局中。 所以问题是如何正确地做到这一点或者是否有我遗漏的东西? 更新: 好像isInLayout()似乎不像现在那样表现。 如果已手动将Fragment添加到容器,则返回false。 此外,如果您手动将Fragment添加到容器,然后将(设备)旋转到不包含该布局的布局,它将崩溃: 引起:java.lang.IllegalArgumentException:在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:722)中找不到片段SearchFragment {4042f868#2 id = 0x7f060011 SearchFragment}的id 0x7f060011的视图

片段生命周期中是否在onAttach上调用?

究竟什么时候onAttach在Fragment-Activity生命周期中被调用? 我知道片段生命周期,但到底是什么时候? 是在启动片段对象还是调用片段管理器时?

ViewPager中的部分片段在屏幕底部被截断(Android)

我为我的视图定义了一个基本的协调器布局: 我的视图分页器中有多个选项卡。 我发布了一个简单的片段: 会发生什么是FAB离开屏幕。 它不是FAB,但其他具有cardviews / listview的片段在屏幕底部被截断。 我四处寻找解决方案,并提出了一个hacky解决方案: 从工具栏中删除属性app:layout_scrollFlags =“scroll | enterAlways” 。 我无法理解可能导致这种情况发生的原因,以及如何解决上述问题解决了这个问题。 它是支持库中的一些错误吗? 有没有更好的方法来解决这个问题? 我遇到的另一个解决方案是从这里开始 – 将FAB按钮直接保持在活动中的Coordinator布局下,并使其仅在您需要的片段中可见。 对我来说似乎不是一个好的解决方案。 此外,我片段中的其他观点也被切断了。

检测片段何时可​​见

为什么不重复:建议的post仅适用于viewpager,或者调用onResume时。 我有一个listfragment和一个detailfragment。 单击列表项时将打开详细信息片段。 我通过隐藏listfragment并显示detailfragment来实现这一目标。 当用户返回时,他返回到listfragment。 如何检测用户何时返回我的片段,或者我的片段何时可​​见? 请注意,我想继续使用.hide()和show(),并且我正在寻找一个监听器或onVisible来检查片段何时 变得可见,而不是检查它是否可见的方法。

android.support.v4.Fragment上的3D翻转animation

我目前正在阅读本教程: http://developer.android.com/training/animation/cardflip.html 关于片段的翻转animation 。 不幸的是, object-animator只适用于android.app.Fragment,而不支持Fragment。 我尝试使用缩放和旋转animation重建.xmlanimation。 但是现在animation没有被执行,并且在我设置animation.xml文件的时间过去之后,出现了另一个片段,而不是翻转。 我是否只是在实施.xmlanimation时犯了错误? 或者没有对象animation师不可能做3D翻转animation? 或者是不可能使用支持Fragment进行3D翻转animation? 这是我的.xmlanimation:flip_left_in.xml flip_left_out.xml flip_right_in.xml flip_right_out.xml 以下是执行它们的代码: FragmentTransaction trans = getActivity().getSupportFragmentManager().beginTransaction(); trans.setCustomAnimations(R.anim.flip_right_in, R.anim.flip_right_out, R.anim.flip_left_in, R.anim.flip_left_out); trans.addToBackStack(null); trans.replace(R.id.content_frame, new MyFragment()).commit();