gpt4 book ai didi

android - 如何将数据从当前 fragment 传递到前一个 fragment

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:34 24 4
gpt4 key购买 nike

我有 2 个 Fragments A 和 B。我从 Fragment A 开始 Fragment B。我需要在 Fragment B 关闭之前将数据从 Fragment B 传递到 Fragment A。它类似于 startActivityForResult() 想法。

在 fragment A 中,我调用 fragment B:

 FragmentB calendarDialog = new FragmentB();
calendarDialog.setTargetFragment(CurrentPanchangDialog.this, 1);
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.setCustomAnimations(R.anim.enter_from_left, R.anim.exit_to_right, R.anim.enter_from_right, R.anim.exit_to_left);
transaction.add(android.R.id.content, calendarDialog).addToBackStack(null).commit();

现在在 Fragment B 中,我在关闭时调用了这样的东西:

getTargetFragment().onActivityResult(
getTargetRequestCode(),
Activity.RESULT_OK,
new Intent().putExtra("data", "datafrom C")
);
getActivity().getSupportFragmentManager().popBackStackImmediate();

现在在基础 Activity 中我覆盖了 onActivityForResult():

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment pFragment = getSupportFragmentManager().findFragmentById(R.id.content);
if (pFragment instanceof CurrentPanchangDialog) {
if (pFragment != null) {
pFragment.onActivityResult(requestCode, resultCode, data);
}
}
super.onActivityResult(requestCode, resultCode, data);
}

我没有将数据从 fragment B 返回到 fragment A。

最佳答案

此方法也称为委托(delegate)模式

• 使用一种方法创建接口(interface),如下所示:

public interface FragmentCallback {
void onDataSent(String yourData);
}

• 在您的 FragmentA 中实现此接口(interface)并实现 onDataSent() 方法:

public class FragmentA implements FragmentCallback {

@Override
void onDataSent(String yourData){
//Do something with your data
}
}

• 在 fragment B 中声明此接口(interface)变量并创建一个公共(public)设置方法:

public class FragmentB {

private FragmentCallback fragmentCallback;

public void setFragmentCallback(FragmentCallback callback) {
this.fragmentCallback = callback;
}
}

• 在 FragmentA 的某处将其设置为 FragmentB 实例的回调:

fragmentB.setFragmentCallback(this);

• 从 FragmentB 到 FragmentA 的路径数据(如果应该在 FragmentB 即将关闭时发送数据,您可以从 fragment 的生命周期方法之一完成):

public class FragmentB {

public void onDestroy() {
if(fragmentCallback != null){
fragmentCallback.onDataSent("Some data from FragmentB");
}
super.onDestroy();
}
}

关于android - 如何将数据从当前 fragment 传递到前一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45246103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com