【问题标题】:How can I dismiss dialog in fragment on orientation change?如何在方向更改时关闭片段中的对话框?
【发布时间】:2016-01-12 02:44:01
【问题描述】:

我的片段就是这样简单:

    public class Fragment1 extends Fragment  implements OnClickListener{

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            View v = inflater.inflate(R.layout.layout_fragment_1, container, false);

        bt = (Button) v.findViewById(R.id.button1);
        bt.setOnClickListener(this);
            return v;
        }


        private void buildAlertDialog() {
            private void buildAlertDialog() {
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int width = metrics.widthPixels;
        int height = metrics.heightPixels;
        Dialog dialog = new Dialog(getActivity());
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.activity_second);
        dialog.show();
        dialog.getWindow().setLayout((6 * width) / 7, (2 * height) / 5);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.button1:
            buildAlertDialog();
            break;

        default:
            break;
        }
    }
        }

还有我的活动:

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
}}

如您所见,我没有设置任何保存状态,但是当我旋转设备时,对话框不断出现。我想要的是解雇它。我应该怎么办?请帮我!谢谢!

【问题讨论】:

    标签: android android-fragments dialog


    【解决方案1】:

    通常它应该消失,可能是因为当设备旋转onCreateView() 调用时您在onCreateView() 中显示您的对话框并且您的对话框再次显示。
    您可以通过单击或任何方式显示您的对话框,或者如果之前显示对话框,则使用标志来保留。

    更新:
    在此更改对话框widthheight

            WindowManager windowManager = getWindowManager();
            Display display = windowManager.getDefaultDisplay();
            WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
            int screenWidth = (int)(display.getWidth() * 6)/7;
            int screenHeight = (int)(display.getHeight() * 2)/7;
            lp.width = screenWidth;
            lp.height = screenHeight;
            dialog.getWindow().setAttributes(lp);
    

    【讨论】:

    • 哦,对不起,这只是演示代码,所以我没有注意到。在实际项目中,我在单击按钮时显示对话框,而不是在 onCreateView()
    • 我知道导致问题的原因。当我添加 DisplayMetrics metrics = getResources().getDisplayMetrics(); 时出现问题int宽度=metrics.widthPixels; int height = metrics.heightPixels; dialog.getWindow().setLayout((6 * width) / 7, (2 * height) / 5);到按钮点击功能。请教我如何解决这个问题
    【解决方案2】:

    当您旋转设备时,会重新创建活动,因此会再次显示对话框,您需要做的就是通过在清单文件中添加这行代码来防止这种情况发生

    android:configChanges="orientation"
    

    见:Android Dialog reopen after rotate device

    【讨论】:

    • 我编辑了我的问题。请看一下 buildDialog() 方法;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2022-01-09
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多