gpt4 book ai didi

Android 如果 Fragment 被销毁,我如何取消由 DialogFragment 创建的 AlertDialog?

转载 作者:行者123 更新时间:2023-11-30 03:21:29 29 4
gpt4 key购买 nike

我有一个有登录按钮的 Activity ,登录按钮有一个异步任务,应该在任务开始前显示一个正在加载的 AlertDialog,并在完成时关闭对话框并退出到另一个 Activity 。

我需要它来处理方向变化,但如果在线程运行时发生方向, fragment 将被销毁,并且在 onPostExecute() 中调用 DialogFragment.dismiss 会给我一个空指针异常。我该怎么办?

在执行前

FragmentManager fm = getFragmentManager();
TestDiag alertFrag = new TestDiag();
alertFrag.show(fm, "Alert_Dialog");

在 PostExecute() 上

FragmentManager fm = getFragmentManager();
TestDiag alertFrag2= (TestDiag) fm.findFragmentByTag("Alert_Dialog");
alertFrag2.dismiss();

编辑:我试过在保留实例上设置为真,它可以工作,但也不起作用。

最佳答案

我只是锁定方向,直到我的 AsyncTask 完成,onPreExecute() -> 锁定和 onPostExecute() -> 释放。

public class Device {

public static void lockOrientation(Activity activity) {
Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int tempOrientation = activity.getResources().getConfiguration().orientation;
int orientation = 0;
switch(tempOrientation)
{
case Configuration.ORIENTATION_LANDSCAPE:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
break;
case Configuration.ORIENTATION_PORTRAIT:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270)
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
activity.setRequestedOrientation(orientation);
}





public static void releaseOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

如果你真的想在任务运行时允许方向改变:Using AsyncTask with progress dialogs and device rotation.

关于Android 如果 Fragment 被销毁,我如何取消由 DialogFragment 创建的 AlertDialog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060443/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com