Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在创建片段后立即显示AlertDialog_Android_Android Layout_Android Fragments - Fatal编程技术网

Android 如何在创建片段后立即显示AlertDialog

Android 如何在创建片段后立即显示AlertDialog,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我想在创建片段后立即显示一个AlertDialog(带有两个单选按钮和一个OK按钮) 调用对话框片段的最佳位置在哪里?我在onViewCreated()和onResume()中都尝试过,但我不确定什么是最佳实践 此外,为了确保对话框不会在每次由于屏幕旋转而停止/重新创建片段时显示,我创建了名为mShowDialog的布尔值,并在onCreate()中将其设置为“true”,然后使用“If”语句决定是否显示该对话框(示例见下文) 上述代码是满足这两个要求的最佳方式吗 顺便说一句,我对编程相当陌生

我想在创建片段后立即显示一个AlertDialog(带有两个单选按钮和一个OK按钮)

调用对话框片段的最佳位置在哪里?我在onViewCreated()和onResume()中都尝试过,但我不确定什么是最佳实践

此外,为了确保对话框不会在每次由于屏幕旋转而停止/重新创建片段时显示,我创建了名为mShowDialog的布尔值,并在onCreate()中将其设置为“true”,然后使用“If”语句决定是否显示该对话框(示例见下文)

上述代码是满足这两个要求的最佳方式吗

顺便说一句,我对编程相当陌生


提前感谢您的帮助。

这方面的最佳做法是在
onCreateView()
片段方法中放大对话框。

如果您试图从添加片段的活动中创建它,我很幸运地在我的片段中添加了
FragmentListener
,并从活动中进行设置。这是我所有片段扩展的基本
BaseFragment
类:

public class BaseFragment extends Fragment {

    public Context context;
    public Activity activity;

    public FragmentListener fragmentListener;

    private boolean attached = false;

    public BaseFragment() {

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        if (!isAttached()) {
            this.context = activity;
            this.activity = activity;

            if (this.fragmentListener != null) {
                this.fragmentListener.onAttached();
            }

            setAttached(true);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        if (!isAttached()) {
            this.context = context;
            this.activity = (Activity) context;

            if (this.fragmentListener != null) {
                this.fragmentListener.onAttached();
            }

            setAttached(true);
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();

        setAttached(false);
        if (this.fragmentListener != null){
            this.fragmentListener.onDetached();
        }
    }

    public void setFragmentListener(FragmentListener fragmentListener) {
        this.fragmentListener = fragmentListener;
    }

    public View.OnClickListener onBackTapped = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getActivity().onBackPressed();
        }
    };

    public boolean isAttached() {
        return attached;
    }

    public void setAttached(boolean attached) {
        this.attached = attached;
    }

    public boolean isPermissionGranted(String permission){
        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
    }

    public boolean ifShouldShowRationaleForPermission(String permission){
        return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission);
    }

    public void showPermissionRequest(Activity activity, int requestCode, String... permissions){
        ActivityCompat.requestPermissions(activity, permissions, requestCode);
    }
}
这样,我可以在我的活动中做到这一点:

MyFragment myFragment = new MyFragment();
myfragment.setFragmentListener(new FragmentListener() {
    @Override
    public void onAttached() {
        // Stuff I want to do when it is attached
    }

    @Override
    public void onDetached() {
        // Stuff I want to do when it is detached
    }
});

fragmentManager.beginTransaction()
        .add(R.id.container, myFragment)
        .commit();
然后我可以在片段运行时添加任何我想要的代码,它是各种各样的东西

祝你好运

MyFragment myFragment = new MyFragment();
myfragment.setFragmentListener(new FragmentListener() {
    @Override
    public void onAttached() {
        // Stuff I want to do when it is attached
    }

    @Override
    public void onDetached() {
        // Stuff I want to do when it is detached
    }
});

fragmentManager.beginTransaction()
        .add(R.id.container, myFragment)
        .commit();