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

sag*_*uri 3 android android-fragments

我有2 FragmentsA和B.我开始Fragment BFragment A.我需要将数据从之前传递Fragment B到关闭Fragment A之前Fragment B.它的startActivityForResult()想法很像.

在片段AI中我正在调用片段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();
Run Code Online (Sandbox Code Playgroud)

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

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

现在在基础活动中我压倒一切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);
    }
Run Code Online (Sandbox Code Playgroud)

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

dzi*_*kyy 7

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

public interface FragmentCallback {
    void onDataSent(String yourData);
}
Run Code Online (Sandbox Code Playgroud)

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

public class FragmentA implements FragmentCallback {

    @Override
    void onDataSent(String yourData){
        //Do something with your data
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public class FragmentB {

private FragmentCallback fragmentCallback;

    public void setFragmentCallback(FragmentCallback callback) {
        this.fragmentCallback = callback;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

fragmentB.setFragmentCallback(this);
Run Code Online (Sandbox Code Playgroud)

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

public class FragmentB {

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