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 {@Overridepublic 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();