
Android
Android中的getTargetFragment和setTargetFragment方法是用于在Fragment之间进行通信的工具。它们允许一个Fragment将自己标记为目标Fragment,并将另一个Fragment设置为其目标Fragment。这种通信方式可以让一个Fragment向另一个Fragment传递数据或者请求操作,从而实现Fragment之间的交互。
使用setTargetFragment设置目标FragmentsetTargetFragment方法用于在一个Fragment中设置另一个Fragment为目标Fragment。这样,当目标Fragment需要与之通信时,可以通过getTargetFragment方法获取到该目标Fragment的实例。例如,假设有两个Fragment:FragmentA和FragmentB。在FragmentA中,通过setTargetFragment方法将FragmentB设置为目标Fragment:FragmentB fragmentB = new FragmentB();fragmentB.setTargetFragment(this, 0);这样,FragmentB就被标记为FragmentA的目标Fragment,FragmentA可以通过getTargetFragment方法获取到FragmentB的实例。使用getTargetFragment获取目标FragmentgetTargetFragment方法用于在一个Fragment中获取其目标Fragment的实例。通过该方法,可以在Fragment中使用目标Fragment的实例进行数据传递或者调用目标Fragment的方法。例如,在FragmentB中,可以通过getTargetFragment方法获取到FragmentA的实例,从而实现数据传递或者调用FragmentA的方法:
FragmentA fragmentA = (FragmentA) getTargetFragment();if (fragmentA != null) { // 在这里可以通过fragmentA进行数据传递或者调用其方法}这样,FragmentB就可以与FragmentA进行通信,实现数据的传递或者调用FragmentA的方法。案例代码下面是一个简单的示例代码,演示了如何使用getTargetFragment和setTargetFragment进行Fragment之间的通信。首先,创建一个包含EditText和Button的FragmentA:Javapublic class FragmentA extends Fragment { private EditText editText; private Button button; @Override public View onCreateView(LayoutInflater inflater, ViewGroup contAIner, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_a, contAIner, false); editText = view.findViewById(R.id.edit_text); button = view.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String text = editText.getText().toString(); FragmentB fragmentB = new FragmentB(); fragmentB.setTargetFragment(FragmentA.this, 0); FragmentTransaction transaction = requireActivity().getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_contAIner, fragmentB); transaction.addToBackStack(null); transaction.commit(); } }); return view; }}然后,创建一个显示EditText内容的FragmentB:Javapublic class FragmentB extends Fragment { private TextView textView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup contAIner, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_b, contAIner, false); textView = view.findViewById(R.id.text_view); FragmentA fragmentA = (FragmentA) getTargetFragment(); if (fragmentA != null) { String text = fragmentA.getEditTextContent(); textView.setText(text); } return view; }}在FragmentA的布局文件fragment_a.XML中,包含一个EditText和一个Button:XML<LinearLayout XMLns:Android="http://schemas.Android.com/apk/res/Android"</p> Android:layout_width="match_parent" Android:layout_height="match_parent" Android:orientation="vertical"> <EditText</p> Android:id="@+id/edit_text" Android:layout_width="match_parent" Android:layout_height="wrap_content" /> <Button</p> Android:id="@+id/button" Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:text="Send" /></LinearLayout>在FragmentB的布局文件fragment_b.XML中,包含一个TextView用于显示EditText的内容:
XML<TextView XMLns:Android="http://schemas.Android.com/apk/res/Android"</p> Android:id="@+id/text_view" Android:layout_width="match_parent" Android:layout_height="wrap_content" />这个示例中,当用户在FragmentA中输入文本并点击按钮后,会创建一个FragmentB的实例,并将FragmentA设置为FragmentB的目标Fragment。然后,在FragmentB中通过getTargetFragment方法获取到FragmentA的实例,并显示FragmentA中EditText的内容。这样,就实现了Fragment之间的通信。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号