为了账号安全,请及时绑定邮箱和手机立即绑定

AsyncTask 中的 DialogFragment 未关闭

AsyncTask 中的 DialogFragment 未关闭

明月笑刀无情 2023-07-19 14:54:00
我有办法每 15 秒检查一次互联网连接。如果没有互联网连接,该方法将调用dialogfragment。到目前为止,它运行得很好。建立互联网连接后,我无法关闭dialogFragment。Logcat 没有给出错误。“dialogfragment dissmis”不起作用,dialogfragment 仍保留在屏幕上。首先,我断开与互联网的连接并调用dialogFragment。随后互联网连接正在运行并且“设备已连接到互联网”。我看到文字了。但对话框片段并没有消失。检查InternetAsyncTask.classpublic class CheckInternetAsyncTask extends AsyncTask<Void, Integer, Boolean> {    Activity activity;    private Context context;    public CheckInternetAsyncTask(Activity activity) {        this.context = activity.getApplicationContext();        this.activity = activity;    }    @Override    protected Boolean doInBackground(Void... params) {        ConnectivityManager cm =                (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);        assert cm != null;        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();        boolean isConnected = activeNetwork != null &&                activeNetwork.isConnected();        if (isConnected) {            try {                InetAddress ipAddr = InetAddress.getByName("google.com");                //You can replace it with your name                return !ipAddr.equals("");            } catch (Exception e) {                Log.e("TAG", "Error checking internet connection"+ e.getMessage());                return false;            }        } else {            //Log.d("TAG", "No network available!");            return false;        }    }
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

好的,我会在这里详细解释。

15 秒前您使用下面的行创建了一个对话框,我们称之为object1

EthernetControlFragment.newInstance()

然后 15 秒后,您再次object2使用上面的行创建一个新对话框,当您关闭它时,您也关闭了这个新对话框object2。不幸的是,您没有保留旧对话框的参考,dialog1这是真正的问题。

解决方案是仅创建一个对象,因此创建类的全局引用EthernetControlFragment并仅在其为空时才对其进行初始化。这样你就只有一个对话框。


查看完整回答
反对 回复 2023-07-19
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

我解决了我的问题。调用片段如下:


    Fragment prev = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag("ethernet");

    if (prev == null) {

        ethernetControlFragment.show(((FragmentActivity) activity).getSupportFragmentManager(), "ethernet");

        ethernetControlFragment.setCancelable(false);

    }

并像这样解雇:


Fragment prev = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag("ethernet");

            if (prev != null) {

                EthernetControlFragment df = (EthernetControlFragment) prev;

                df.dismiss();

            }

我认为这些方法是调用和消除片段最可靠的方法。


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信