我有一个带有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
}
答案 0 :(得分:0)
请阅读以下内容: https://developer.android.com/training/basics/fragments/communicating
这是标准方式。基本上创建Fragment1
接口,以实现Activity
;在Fragment中为Activity
分配一个引用作为该接口;然后从“活动”中找到另一个片段,以调用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之间进行通信。