我要去FragmentA-> FragmentB.现在从FragmentB我想将数据传递给FragmentA.So我该怎么做?
目前我正在使用FragmentB-> FragmentA getCustomFragmentManager().popBackStack();
但没有传递任何值.
Shw*_*han 39
在FragmentA中
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
FragmentB frgamentB = new FrgamentB();
fragmentB.setTargetFragment(FrgamentA.this, AppConstant.FRAGMENT_CODE);
ft.addToBackStack(fragment.getClass().getName());
ft.add(R.id.content, fragment, tag);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
现在覆盖
onActivityResult()FragmentA
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode==AppConstant.FRAGMENT_CODE){
int addID = data.getIntExtra("addressID", 0);
String addressLine=data.getStringExtra("addressLine");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在FragmentB中(单击后退按钮)
Intent intent = new Intent(context, FragmentB.class);
intent.putExtra("addressID", list.get(position).getId());
intent.putExtra("addressLine", list.get(position).getAddressLine1());
getTargetFragment().onActivityResult(getTargetRequestCode(), RESULT_OK, intent);
getFragmentManager().popBackStack();
Run Code Online (Sandbox Code Playgroud)
如果使用 Kotlin 和 android 导航架构,您可以像这样使用,从 Navigation 2.3.0-alpha02 版本开始。
在片段 B 上设置结果:
findNavController().previousBackStackEntry?.savedStateHandle?.set("key", result)
Run Code Online (Sandbox Code Playgroud)
使用相同的密钥观察片段 A 上的结果:
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<Type>("key")?.observe(
viewLifecycleOwner) {result ->
// Do something with the result.
}
Run Code Online (Sandbox Code Playgroud)
由于 setTargetFragment 已被弃用。您可以使用setFragmentResultListener。
在片段A中
setFragmentResultListener("KEY") { reqKey, bundle ->
if (reqKey == "KEY")
{
val result = bundle.getString("RESULT")
Toast.makeText(requireContext(), "Result: $result", Toast.LENGTH_LONG).show()
}
}
Run Code Online (Sandbox Code Playgroud)
在片段B中
val resultBundle = Bundle().apply { putString("RESULT", "result from FragmentB") }
setFragmentResult("KEY", resultBundle)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7402 次 |
| 最近记录: |