1.通过 getActivity() 方法获取 Activity 实例:
在 Fragment 中,可以通过 getActivity() 方法获取当前 Fragment 所依附的 Activity 实例。然后可以调用 Activity 的公共方法或者直接访问 Activity 的字段来获取数据。
// 在 Fragment 中获取 Activity 中的数据示例
if (getActivity() != null) {
MyActivity activity = (MyActivity) getActivity();
String data = activity.getData();
// 使用获取到的数据
}
2.通过回调接口传递数据:
定义一个接口,在 Fragment 中实现该接口,并在 Activity 中设置接口的回调,这样可以实现 Fragment 向 Activity 传递数据的双向通信。
步骤如下:
在 Fragment 中定义一个接口:
public interface OnDataReceivedListener {
void onDataReceived(String data);
}
在 Fragment 中保存接口的实例,并在合适的时机调用接口方法传递数据:
private OnDataReceivedListener listener;
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
if (context instanceof OnDataReceivedListener) {
listener = (OnDataReceivedListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnDataReceivedListener");
}
}
// 在合适的时机调用接口方法传递数据
if (listener != null) {
listener.onDataReceived(data);
}
在 Activity 中实现接口:
public class MyActivity extends AppCompatActivity implements MyFragment.OnDataReceivedListener {
@Override
public void onDataReceived(String data) {
// 处理从 Fragment 传递过来的数据
}
}
3.通过 ViewModel 共享数据:
使用 ViewModel 来管理数据,Fragment 和 Activity 都可以通过获取同一个 ViewModel 实例来共享数据。这种方法适用于需要在 Fragment 和 Activity 之间共享大量数据的情况。
在 Activity 中创建 ViewModel:
MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class);
在 Fragment 中获取相同的 ViewModel 实例:
MyViewModel viewModel = new ViewModelProvider(requireActivity()).get(MyViewModel.class);
通过 ViewModel 共享数据:
// 在 Activity 或者 Fragment 中设置和获取 ViewModel 中的数据
viewModel.setData(data);
String data = viewModel.getData();