[英]launch a fragment with result using navigation architecture components
下面是我如何使用 android navigating
從fragment A
navigation
到fragment B
@Override
public void onClick(View view) {
int viewId = view.getId();
if (viewId == R.id.btn_proceed) {
Navigation.findNavController(view).navigate(R.id.fragmentB);
}
}
我想實現從fragmentB
到fragmentA
的結果返回,例如 fragmentB 有一個EditText ,用戶輸入文本並返回到 fragmentA 並使用 android 架構導航組件設置為TextView
根據返回結果的文檔,我能夠使用下面的代碼實現我所要求的。
聲明一個NavController
private NavController navController;
onViewCreated
方法內部
navController = Navigation.findNavController(view);
MutableLiveData<String> liveData = Objects.requireNonNull(navController.getCurrentBackStackEntry())
.getSavedStateHandle()
.getLiveData("key");
從FragmentB得到FragmentA的結果
liveData.observe(getViewLifecycleOwner(), s -> {
tvResult.setText(s);
});
在FragmentB中執行以下操作,例如單擊按鈕時
@Override
public void onClick(View view) {
int viewId = view.getId();
NavController navController = Navigation.findNavController(view);
if (viewId == R.id.btn_returnResult) {
String etText = editText.getText().toString();
Objects.requireNonNull(navController.getPreviousBackStackEntry())
.getSavedStateHandle().set("key", etText);
navController.navigateUp();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.