相关疑难解决方法(0)

碎片中的碎片

我想知道这是否是Android API中的一个错误:

我有这样的设置:

?----?---------?
|    |         |
|  1 |    2    |
|    |?-------?|
|    ||       ||
|    ||   3   ||
?----??-------??
Run Code Online (Sandbox Code Playgroud)
  1. 是一个在右侧窗格中加载片段#2(搜索屏幕)的菜单.
  2. 是包含片段#3的搜索屏幕,片段#3是结果列表.
  3. 结果列表在几个地方使用(包括作为一个功能正常的高级片段).

此功能在手机上非常有效(其中1和2和3为ActivityFragments).

但是,当我使用此代码时:

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();       
    Fragment frag = new FragmentNumber2();
    if(toLoad != null) frag.setArguments(toLoad);
    transaction.replace(R.id.rightPane, frag);      
    transaction.commit();
Run Code Online (Sandbox Code Playgroud)

其中R.id.leftPaneR.id.rightPane<fragment>S IN水平线性布局.

据我所知,上面的代码删除了驻留的片段,然后用新的片段替换它.很棒......显然不会发生这种情况,因为当第二次运行此代码时会出现以下异常:

07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
Run Code Online (Sandbox Code Playgroud)

这是因为FragmentNumber3的容器已被复制,并且它不再具有唯一ID.在添加新的片段之前,初始片段没有被销毁(?)(在我看来,这意味着它还没有被 …

android android-fragments android-nested-fragment

145
推荐指数
4
解决办法
14万
查看次数

不使用支持库的Android 4.0,4.1(<4.2)中嵌套片段的最佳实践

我正在为4.0和4.1平板电脑编写一个应用程序,我不想使用支持库(如果不需要),而只使用4.x api.

所以我的目标平台定义为:> = 4.0且<= 4.1

该应用程序具有多窗格布局(两个片段,左侧一个小片段,右侧一个内容片段)和一个带标签的操作栏.

与此类似:

在此输入图像描述

单击操作栏上的选项卡可更改"外部"片段,然后内部片段是具有两个嵌套片段的片段(1.左侧小片段,2.宽内容片段).

我现在想知道替换片段,特别是嵌套片段的最佳做法是什么.ViewPager是支持库的一部分,此类没有本机4.x替代方案.在我看来似乎是"弃用".- http://developer.android.com/reference/android/support/v4/view/ViewPager.html

然后我阅读了Android 4.2的发行说明ChildFragmentManager,这是一个不错的选择,但我的目标是4.0和4.1,所以这也不能使用.

ChildFragmentManager 仅适用于4.2

遗憾的是,即使在整个Android开发人员指南中,也没有任何好的示例显示没有支持库的片段使用的最佳实践; 尤其是关于嵌套片段的一切.

所以我想知道:如果不使用支持库及其附带的所有内容,是否根本不可能使用嵌套片段编写4.1应用程序?(需要使用FragmentActivity而不是Fragment等?) 或者什么是最佳实践?


我目前在开发中遇到的问题正是这个陈述:

Android支持库现在还支持嵌套片段,因此您可以在Android 1.6及更高版本上实现嵌套片段设计.

注意:当布局包含a时,您无法将布局扩展为片段<fragment>.仅在动态添加到片段时才支持嵌套片段.

因为我在XML中定义了嵌套片段,这显然会导致如下错误:

Caused by: java.lang.IllegalArgumentException: Binary XML file line #15: Duplicate id 0x7f090009, tag frgCustomerList, or parent id 0x7f090008 with another fragment for de.xyz.is.android.fragment.CustomerListFragment_
Run Code Online (Sandbox Code Playgroud)

目前,我为自己总结一下:即使在4.1上,当我甚至不想以2.x平台为目标时,如果没有支持库,则无法在屏幕截图中显示嵌套片段.

(这实际上可能更像是一个wiki条目而不是一个问题,但也许其他人之前已经管理过它).

更新:

一个有用的答案是:Fragment Inside Fragment

android android-fragments android-support-library android-nested-fragment

115
推荐指数
1
解决办法
7万
查看次数

Android:你能嵌套碎片吗?

是否有可能坚持Fragment另一个的布局Fragment?有没人试过这个?

android fragment android-fragments android-nested-fragment

29
推荐指数
3
解决办法
1万
查看次数

Android中嵌套片段之间的通信

我最近学会了如何在Android中制作嵌套片段.不过,我不知道应该如何进行沟通.

在此输入图像描述

从阅读片段通信文档我知道

所有Fragment-to-Fragment通信都是通过相关的Activity完成的.两个碎片永远不应该直接通信.

这对于活动中的兄弟片段是有意义的,但它对于父子片段通信没有多大意义.我是否需要一直到活动只是为了让Child Fragment与Parent Fragment交谈?如果答案是简单的"是"那么我就可以做到.如果它是"否",那么代码设计会是什么样子?

我在Nested Fragment文档中看到,可以使用它getParentFragment()来获取对父片段的引用.这是否意味着孩子应该直接与父母沟通?这似乎与通过与父活动进行通信的正常片段所鼓励的相反.

android android-fragments

23
推荐指数
2
解决办法
1万
查看次数

嵌套片段和后栈

Back Stack是否支持与Android中嵌套片段的交互?

如果是的话,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后台堆栈的事实.我希望它不是因为嵌套片段的问题,而是我做错了什么.

以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:

     MyFragment fragment = new MyFragment();
     FragmentTransaction ft = getChildFragmentManager().beginTransaction();
     ft.setCustomAnimations(R.animator.slide_in_from_right, R.animator.slide_out_left, R.animator.slide_in_from_left, R.animator.slide_out_right);
     ft.addToBackStack(null);
     ft.replace(R.id.myFragmentHolder, fragment);
     ft.commit();
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-nested-fragment

18
推荐指数
1
解决办法
2万
查看次数

带有导航组件的 Fragment 中的底部导航

在我的应用程序中,我有一个BottomNavigation来自 Material design的主屏幕。从这些屏幕中,我希望能够启动BottomNavigation隐藏的其他片段,以便新片段填满整个屏幕。然后应该可以通过后退箭头返回。我想你们都可以想象这一点,因为这是今天非常普遍的模式。

为了实现这一点,我想使用带有单个活动设计的导航组件。我的想法是,我的 MainActivity 只包含一个,NavHostFragment而 BottomNavFragment 包含另一个NavHostFragment以及BottomNavigation。由于隐藏的可能性,我无法移动 BottomNavigation到 MainActivity 布局。

这对我来说似乎有点奇怪。我真的需要两个导航图和两个NavHostFragments吗?的NavHostFragment在BottomNavFragment仅具有目的,以显示与相关联的相关片段BottomNavigation。要导航到其他片段,我必须使用NavHostFragment来自活动的 。如果我使用相同的导航图,它会与开始导航相冲突,从而导致无休止的递归。

或者我应该DialogFragments对我想开始的其他片段使用全屏吗?如果是这样,我如何告诉导航组件以全屏对话框的形式启动对话框?谷歌有推荐的方法来做到这一点吗?

android android-fragments android-bottomnav android-architecture-navigation

5
推荐指数
1
解决办法
1174
查看次数

在BottomSheetDialogFragment内部添加/替换片段

此代码:在其中我要添加片段的地方打开bottomSheetDialogFragment。

我想在bottomsheetDialogFragment中添加多个片段,但是会抛出

java.lang.IllegalArgumentException:找不到ID为0x7f0a01cb的视图

class AddNotesBottomSheetDialog : BottomSheetDialogFragment() {

private lateinit var bottomSheetDialog: BottomSheetDialog
private lateinit var bottomSheetBehavior: BottomSheetBehavior<View>

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    Log.v(LOG_TAG, "-> onCreateDialog")

    bottomSheetDialog = BottomSheetDialog(context!!)

    var view = View.inflate(context, R.layout.bottom_sheet_notes, null)
    bindViews(view)
    bottomSheetDialog.setContentView(view)
    bottomSheetBehavior = BottomSheetBehavior.from(view.parent as View)
    bottomSheetBehavior.isHideable = false
    bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED

    return bottomSheetDialog
}

private fun bindViews(view: View) {
    loadAddNotesFragments()

}

override fun onStart() {
    super.onStart()
    Log.v(LOG_TAG, "-> onStart")

    bottomSheetBehavior.isHideable = false
    bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
    if (!visible)
        dialog.hide()
}


fun show(fragmentManager: FragmentManager) …
Run Code Online (Sandbox Code Playgroud)

android android-xml bottom-sheet

4
推荐指数
1
解决办法
1877
查看次数

将片段添加到片段中

是否可以在另一个片段中添加片段?

事实上,我有一个包含片段 F1Activity A,我想在片段 F1 中添加另一个片段 F1.1

在此处输入图片说明

我怎样才能做到这一点。

我希望你明白我的问题

android fragment android-activity

1
推荐指数
1
解决办法
5807
查看次数