Android - getTargetFragment 和 setTargetFragment - 它们的用途是什么

android

1个回答

写回答

cxm11

2025-07-09 21:20

+ 关注

Android
Android

Android中的getTargetFragment和setTargetFragment方法是用于在Fragment之间进行通信的工具。它们允许一个Fragment将自己标记为目标Fragment,并将另一个Fragment设置为其目标Fragment。这种通信方式可以让一个Fragment向另一个Fragment传递数据或者请求操作,从而实现Fragment之间的交互。

使用setTargetFragment设置目标Fragment

setTargetFragment方法用于在一个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获取目标Fragment

getTargetFragment方法用于在一个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:

Java

public 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:

Java

public 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之间的通信。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号