一、使用Bundle傳遞數據
在Fragment中可以通過創建Bundle對象將數據傳遞給另外一個Fragment或者Activity。
// 創建一個Bundle對象,並將數據添加到Bundle中
Bundle bundle = new Bundle();
bundle.putString("key", value);
// 將Bundle對象設置到Intent中
YourFragment fragment = new YourFragment();
fragment.setArguments(bundle);
// 在另外一個Fragment或者Activity中獲取數據
Bundle bundle = getArguments();
if (bundle != null) {
String value = bundle.getString("key");
}
二、使用介面回調傳遞數據
Fragment可以通過定義介面和回調方法,將數據傳遞給上層的Activity或者其他Fragment。
首先,在Fragment中定義介面和回調方法:
public interface OnDataPass {
public void onDataPass(String data);
}
private OnDataPass dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
dataPasser = (OnDataPass) context;
}
// 在需要傳遞數據的地方調用回調方法
dataPasser.onDataPass(data);
在Activity或者其他Fragment中實現介面和回調方法:
public class MainActivity extends AppCompatActivity implements YourFragment.OnDataPass {
// 重寫回調方法
@Override
public void onDataPass(String data) {
// 處理傳遞過來的數據
}
}
三、使用ViewModel傳遞數據
ViewModel可以將數據在Fragment間共享,即便是Activity銷毀重建也不會丟失數據。
首先需要添加ViewModel依賴:
dependencies {
def lifecycle_version = "2.3.1"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
}
在Fragment中創建ViewModel對象:
// 創建ViewModel對象
YourViewModel viewModel = new ViewModelProvider(this).get(YourViewModel.class);
// 將數據設置到ViewModel中
viewModel.setData(data);
// 在其他Fragment或者Activity中獲取數據
YourViewModel viewModel = new ViewModelProvider(requireActivity()).get(YourViewModel.class);
String data = viewModel.getData();
以上就是在Android Fragment中實現數據傳遞的三種常用方式。
使用Bundle傳遞數據可靠性高,但對數據大小有限制。使用介面回調傳遞數據適用於簡單的數據傳遞場景。而使用ViewModel傳遞數據則適用於需要在多個Fragment或者Activity間共享數據的情況。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289097.html