DialogFragment不会显示在侦听器中

时间:2018-04-25 04:13:54

标签: android fragment android-dialogfragment

我知道有一个问题具有相同的标题,但我的情况有点复杂。在FragmentA中,一旦单击该按钮将启动一个新活动以显示FragmentB,如果然后单击FragmentB中的一个按钮,我需要关闭FragmentB并返回FragmentA并显示DialogFragmentC。我所做的是在FragmentB中定义一个监听器并在FragmentA中实现它。

示例代码段如下:

class FragmentA extends Fragment implements FragmentBDelegate {
    .......
    @Override
    public void onButtonClicked() {
        DialogFragment popup = new DialogFragmentC();
        popup.show(((AppCompatActivity)getContext()).getSupportFragmentManager(), null);
    }
    ......
}

class FragmentB extends Fragment{
    ......
    private void onButtonClicked(View v) {
        getActivity().finish();// to dismiss current activity
        if(mListener != null) {
            mListener.onButtonClicked();
        }
    }

    public interface FragmentBDelegate {
        void onButtonClicked();
    }

    ......
}

为什么DialogFragment没有出现?如果监听器无法实现此要求,如何实现?

2 个答案:

答案 0 :(得分:1)

@ ADM的评论指导我一个解决方法。我使用showWithStateLoss()定义了一个commitAllowingStateLoss()方法,以便在DialogFragmentC中提交FragmentTransaction。然后就行了。

public void showWithStateLoss(FragmentManager manager, String tag) {
    FragmentTransaction ft = manager.beginTransaction();
    ft.add(this, tag);
    ft.commitAllowingStateLoss(); //original it's commit()
}

答案 1 :(得分:0)

不应该(也许你可以,但不应该)在不同的活动之间使用回调方法。

如果这正是您需要做的,您需要为startActivityForResult()的结果启动第二个活动。然后决定是否要根据第二个活动结果显示对话框。 FragmentB将设置结果,而不是尝试调用第一个活动的回调。