android - 为什么在关闭从 fragment 启动的 DialogFragment 后从未触发 fragment 的 onResume 方法?

标签 android android-fragments android-dialogfragment onresume dismiss

我将尽可能简短地解释我的问题。

我有一个名为 FragmentA 的 Fragment,它在单击特定按钮后显示一个 DialogFragment。

public class FragmentA extends Fragment implements OnClickListener {

    ...

    @Override
    public void OnClick(View v) {
        if (v == dialogButton) {
            showDialog();
        }
    }

    public void showDialog() {
        String diagName = getResources().getString(R.string.dialog_title);
        MyDialog myDialog = MyDialog.newInstance(getFragmentAValue());
        myDialog.show(getFragmentManager(), diagName);
    }
}

public class MyDialog extends DialogFragment implements OnClickListener {
    ...
    @Override
    public void onClick(View view) {
        if (view == acceptButton) {
            ...
        }
        else if (view == cancelButton) {
            ...
        }
    }
}

对话框显示没有任何问题。但我的问题在于,在关闭 myDialog 之后,从未调用 FragmentA 中的 onResume() 方法并显示 FragmentA,您可以毫无问题地与之交互。

public class FragmentA extends Fragment implements OnClickListener {

    ...

    @Override
    public void onResume() {
        super.onResume();
        resumeFragmentA();
    }
}

所以,为了解决这个问题,我所做的是在 onActivityCreated() 方法的末尾复制 FragmentA 的一个实例,并调用方法 resumeFragmentA()当用户关闭对话框时。

public class FragmentA extends Fragment implements OnClickListener {

    FragmentA fragmentA = null;

    ...

    @Override
    public void onResume() {
        super.onResume();
        resumeFragmentA();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {

        ...

        fragmentA = this;
    }

    ...
}

public class MyDialog extends DialogFragment implements OnClickListener {
    ...
    @Override
    public void onClick(View view) {
        if (view == acceptButton) {
            storeData();
            dismissDialog();
        }
        else if (view == cancelButton) {
            dismissDialog();
        }
    }

    public void dismissDialog() {
        FragmentA.fragmentA.resumeFragmentA();
        dismiss();
    }

}

我知道这个解决方案很棘手,但我不知道用更出色的方式解决。你知道吗?任何想法? 提前致谢!

为了更好地阅读我的代码,这里有我的完整代码:

public class FragmentA extends Fragment implements OnClickListener {

    ...

    FragmentA fragmentA = null;

    ...

    @Override
    public void OnClick(View v) {
        if (v == dialogButton) {
            showDialog();
        }
    }

    public void showDialog() {
        String diagName = getResources().getString(R.string.dialog_title);
        MyDialog myDialog = MyDialog.newInstance(getFragmentAValue());
        myDialog.show(getFragmentManager(), diagName);
    }

    @Override
    public void onResume() {
        super.onResume();
        resumeFragmentA();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {

        ...

        fragmentA = this;
    }

    ...
}


public class MyDialog extends DialogFragment implements OnClickListener {

    ...

    static MyDialog newInstance(int value) {
        MyDialog fragment = new MyDialog ();
        Bundle args = new Bundle();
        args.putInt("value", value);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onClick(View view) {
        if (view == acceptButton) {
            storeData();
            dismissDialog();
        }
        else if (view == cancelButton) {
            dismissDialog();
        }
    }

    public void dismissDialog() {
        FragmentA.fragmentA.resumeFragmentA();
        dismiss();
    }

    ...

}

最佳答案

如果您只想调用 FragmentA 的 onResume,请在您的 DialogFragment 中调用 startActivityForResult,然后启动您的 FragmentActivity。这将调用 onResume。

public void dismissDialog() {
   getActivity().startActivityForResult(getActivity().getIntent(), 10);
   dismiss()
}

关于android - 为什么在关闭从 fragment 启动的 DialogFragment 后从未触发 fragment 的 onResume 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19197085/

相关文章:

android - Android 和 iOS 中 ble 扫描率的差异

java - 使用 Firebase Java API 检索/格式化数据的最佳方式

android - 使用 fragment

android - DialogFragment 大小(宽度)被忽略

android - 初级安卓布局

Android TagHandler 对标准标签没有影响

java - NestedScrollView 中的 fragment

android - 无法让 objectAnimator 使用 xFraction

java - 对话框 fragment 定位

android - FragmentManager.findFragmentByTag() 返回 null