当前位置: 首页 > 知识库问答 >
问题:

无法将参数传递给子片段

艾晋
2023-03-14

我有一个片段a,包含一个片段B。

当片段A处于onActivityCreated生命周期中时,我想从片段A向片段B传递一个参数(因为我有一个来自viewmodel的数据,该数据此时到达)。

在我的片段B中,我无法得到这个论点。我有一个空异常。

你有办法解决我的问题吗?

这是我的代码

片段A

class FragmentA: Fragment() {

    private lateinit var fragmentB: FragmentB

    /**
     * @inheritdocs
     */
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_a, container, false)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        this.fragmentB = FragmentB()
        val transaction = childFragmentManager.beginTransaction()
        transaction.add(R.id.fragmentB, fragmentB).commit()
    }

    /**
     * @inheritdocs
     */
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        val args = Bundle()
        args.putString("name", "test")
        this.fragmentB.arguments = args
    }
}

片段B

class FragmentB: Fragment() {


    /**
     * @inheritdocs
     */
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_b, container, false)
    }

    /**
     * @inheritdocs
     */
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        var name = this.arguments?.getString("name")!!
    }
}

fragment_a.xml

<androidx.constraintlayout.widget.ConstraintLayout 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">

    <fragment
        android:id="@+id/fragmentB"
        android:name="com.test.view.FragmentB"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

共有3个答案

吉泰宁
2023-03-14

如果您的数据在viewmodel中,那么片段本身没有理由不能直接访问它。viewmodels的优点之一是易于在其组成组件之间共享屏幕的数据,无论它们是视图/片段/什么。

您可以参考此处的文档。

充阳秋
2023-03-14

在片段B内部,实现静态方法来初始化片段,如下所示。

public static FragmentB newInstance(string x) {
  FragmentB f = new FragmentB ();

  Bundle args = new Bundle();
  args.putInt("name", x);
  f.setArguments(args);
  return f;
}

您可以在FragmentA中使用此方法

在这里阅读更多

南门魁
2023-03-14

您已经在xml布局中声明了片段。这意味着它是在没有参数的情况下创建的。如果您是从代码中添加片段,则不需要在xml中声明它。

因此,只需将xml更改为:

<androidx.constraintlayout.widget.ConstraintLayout       
    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">

    <FrameLayout
        android:id="@+id/fragmentB"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>
 类似资料:
  • 问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 我正在使用GraphQL查询一个对象,该对象将由大约15个不同的REST调用组成。这是我的根查询,我在其中传入查询的ID。这对于正确解析的主要student对象非常有效。但是,我需要弄清楚如何将ID传递给地址解析程序。我尝试将args添加到address对象,但出现了一个错误,表明args没有从Student对象传递下来。所以我的问题是:如何将客户机查询中的参数传递给GraphQL服务器中的子对象

  • 问题内容: 我正在尝试将图像传递给另一个类,但 它仅适用于,不适用于。 这是开始使用相机功能的地方。在 ImageFitScreen.java中 ,它具有一个用于返回到上一个活动的按钮。 ImageFitScreen.java 上一个活动 由于图像可以显示在中,因此可以返回到上一个活动 。在上一个活动中,它也有一个返回活动A的按钮。 活动A 活动B (活动) Global.java 当它进入活动B

  • 问题内容: 在我的RCP应用程序中,左侧有一个用于导航的视图,右侧有一个用于视图的文件夹。透视图看起来像这样: 我想根据用户在导航树中选择的内容打开不同的视图。认为这并不难。我的导航树视图: 这似乎很好。仅有一个小问题:我需要以某种方式将对象(例如,selectedItem)传递给我的视图,以使用户与其内容进行交互。我怎么做? 我看到了一些示例,其中一些同事编写了自己的视图,并将其放置在右侧。然后