如何将数据从当前片段传递到以前的片段

时间:2017-07-21 20:18:52

标签: android android-fragments

我有2 import assetMap from 'my-new-addon/asset-map'; A和B.我从Fragments开始Fragment B。我需要在Fragment A关闭之前将数据从Fragment B传递到Fragment A。它就像Fragment B想法一样。

在片段A中我称之为片段B:

startActivityForResult()

现在在片段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();

现在在基本活动中,我将覆盖getTargetFragment().onActivityResult( getTargetRequestCode(), Activity.RESULT_OK, new Intent().putExtra("data", "datafrom C") ); getActivity().getSupportFragmentManager().popBackStackImmediate();

onActivityForResult()

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

2 个答案:

答案 0 :(得分:7)

•使用如下方法创建一个接口:

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

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

public class FragmentA implements FragmentCallback {

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

•在Fragment B中声明此接口变量并创建一个公共setter方法:

public class FragmentB {

private FragmentCallback fragmentCallback;

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

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

fragmentB.setFragmentCallback(this);

•从FragmentB到FragmentA的路径数据(如果要在FragmentB即将关闭时发送数据,您可以从片段的生命周期方法之一执行此操作):

public class FragmentB {

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

答案 1 :(得分:0)

您也可以在Activity中使用一个变量,然后从Fragment中访问它,可能是这样的:

的活动:

private String data;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

public String getData() {
    return this.data;
}

片段:

String dataFromActivity = ((YourActivity)getActivity).getData();