嵌入式 Fragment 交互

菲尔布莱斯

我有一个带有 2 个嵌入片段的片段。我想让嵌入的 fragment1 与嵌入的 fragment2 交互。例如,我在嵌入的 fragment1 中有一个按钮,当我按下所述按钮时,我希望它更新嵌入的 fragment2 中的 TextView。

这是我的主要“父”片段

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <fragment
            android:id="@+id/fragment1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:layout="@layout/fragment1"/>

        <fragment
            android:id="@+id/fragment2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:layout="@layout/fragment2"/>
    </LinearLayout>

这是我的 fragment1 类 onCreateView 方法:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    super.onCreateView(inflater, container, savedInstanceState)
    val mainView = inflater.inflate(R.layout.fragment1, container, false)
    val button = mainView.findViewById<Button>(R.id.button)
    button.setOnClickListener {
         /* Update TextView inside Fragment2 */
    }

    return mainView
}

这是我的 fragment2 类 onCreateView 方法:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    super.onCreateView(inflater, container, savedInstanceState)
    val mainView = inflater.inflate(R.layout.fragment2, container, false)
    val textView = mainView.findViewById<TextView>(R.id.textview)

    return mainView
}
艾伦康达

阅读此内容:https : //developer.android.com/training/basics/fragments/communicating

这是标准方式。基本上创建要实现Fragment1接口ActivityActivity在 Fragment 中分配一个引用作为该接口;然后从Activity中找到另一个fragment来调用fragment方法来更新textView。

编辑:在片段内的片段的情况下,您可以在父片段中实现接口并像这样附加:

@Override
public void onAttach(Context context) {
  super.onAttach(context);
  try {
        callback = (SomeInterface) getParentFragment();
    } catch (ClassCastException e) {
        throw new ClassCastException("Parent fragment must implement SomeInterface");
    }

}

但是,正如文章中提到的,这是旧的方式。现代方式是在共享 ViewModel 之间进行通信。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章