本文介绍了获取动态附加到 <FrameLayout> 的 Fragment?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,我得到了一个简单的:

Well, i got a simple <FrameLayout>:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FragmentContainer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

然后在我的代码中,我添加了一个片段:

Then in my code, i added a Fragment to it:

FragClass aFrag = new FragClass();
getSupportFragmentManager().beginTransaction()
        .replace(R.id.FragmentContainer, aFrag).commit();

在我的代码中的其他地方,我想从 ID R.id.FragmentContainer 中获取 FragClass (extends Fragment) 对象.

And somewhere else in my code, i want to get that FragClass (extends Fragment) object from the ID R.id.FragmentContainer.

我试过了

((ViewGroup) findViewById(R.id.FragmentContainer)).getChildAt(0)

((FrameLayout) findViewById(R.id.FragmentContainer)).getChildAt(0)

但他们返回的是 View,而不是附加到它的 Fragment.

but they are returning the View, instead of the Fragment attached to it.

我知道我可以将变量 aFrag 保存在某处,所以我不需要再次找到它.但我相信应该有办法收回它.

i know i can keep the variable aFrag somewhere, so i do not need to find it again. But i believe there should be a way to retieve it.

推荐答案

让我用一个完整的答案来结束它:)

Let me wrap it up by a full answer :)

在这种情况下,动态添加的Fragment使用容器View(ViewGroup)的ID.

In this case, the dynamically added Fragment uses the ID of the container View (ViewGroup).

参考:http://developer.android.com/guide/components/fragment.html#Adding

注意:每个片段都需要一个唯一标识符,如果活动重新启动,系统可以使用该标识符来恢复片段(并且您可以使用它来捕获片段以执行事务,例如将其删除).可以通过三种方式为片段提供 ID:

  • 提供具有唯一 ID 的 android:id 属性.
  • 提供具有唯一字符串的 android:tag 属性.
  • 如果前两个都不提供,系统将使用容器视图的 ID.

因为它毕竟是一个Fragment.我们必须使用 getSupportFragmentManager().findFragmentById() 来检索它,它返回一个 Fragment,而不是返回一个 findViewById()代码>查看.

It is because it's a Fragment afterall. We have to use getSupportFragmentManager().findFragmentById() to retrieve it, which returns a Fragment, instead of findViewById() which returns a View.

所以这个问题的答案是:

So the answer to this problem would be:

((aFrag) getSupportFragmentManager().findFragmentById(R.id.FragmentContainer))

感谢@Luksprog.

这篇关于获取动态附加到 <FrameLayout> 的 Fragment?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 21:01