簡體   English   中英

使用 SafeArgs 將參數從片段傳遞到活動

[英]Passing argument from fragment to activity using SafeArgs

使用導航圖,當我從片段導航到活動並使用安全參數傳遞參數時,在活動中,我無法獲得參數。 我怎樣才能得到從片段傳遞的參數???

在片段中,我可以通過getArgument() function 獲得參數,但不能在活動中。

在片段中,我通過以下方式切換到另一個活動:

findNavController().navigate(AFragmentDirections.actionAFragmentToBActivity(1)

並在 B 活動中通過以下方式在 onCreate 中獲取參數:

val args = BActivityArgs.fromBundle(savedInstanceState!!)

但我的應用程序立即崩潰。

接受的答案不是您問題的答案。 正如您所指出的:您不能在Activity中使用getArguments() ,您只能在片段中執行此操作。 但是,在活動中,您可以獲得這樣的數據(java 語法):

String aField = BActivityArgs.fromBundle(getIntent().getExtras()).getAField()

因此,如果您在接收端有Activity ,只需將getArguments()替換為getIntent().getExtras()

查看 Android 文檔:-

https://developer.android.com/guide/navigation/navigation-pass-data#java

發送數據

@Override
public void onClick(View view) {
EditText amountTv = (EditText) getView().findViewById(R.id.editTextAmount);
int amount = Integer.parseInt(amountTv.getText().toString());
ConfirmationAction action =
       SpecifyAmountFragmentDirections.confirmationAction()
action.setAmount(amount)
Navigation.findNavController(view).navigate(action);
}

獲取數據:-

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
TextView tv = view.findViewById(R.id.textViewAmount);
int amount = ConfirmationFragmentArgs.fromBundle(getArguments()).getAmount();
tv.setText(amount + "")
}
BActivityArgs.fromBundle(getIntent().getExtras()).getAField();

完美工作

Navigation 組件專為具有一個主要活動和多個片段目的地的應用程序而設計。 主要活動與導航圖相關聯,並包含一個 NavHostFragment,負責根據需要交換目的地。 在具有多個活動目的地的應用程序中,每個活動都有自己的導航圖

  • 一個解決方案可能是:重新考慮是否可以將活動轉換為片段,然后新創建的片段可以由相同的導航組件處理。 因此允許您使用正常的 SafeArgs 語法來傳遞和檢索數據。

  • 如果您仍然對 SafeArgs 插件有疑問,我強烈推薦 Android 官方團隊的這篇中等文章, 這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM