AsyncTask 中的 DialogFragment 未关闭

我有办法每 15 秒检查一次互联网连接。如果没有互联网连接,该方法将调用dialogfragment。到目前为止,它运行得很好。建立互联网连接后,我无法关闭dialogFragment。Logcat 没有给出错误。“dialogfragment dissmis”不起作用,dialogfragment 仍保留在屏幕上。


首先,我断开与互联网的连接并调用dialogFragment。随后互联网连接正在运行并且“设备已连接到互联网”。我看到文字了。但对话框片段并没有消失。


检查InternetAsyncTask.class


public 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;

        }

    }


明月笑刀无情
浏览 125回答 2
2回答

慕尼黑5688855

好的,我会在这里详细解释。15 秒前您使用下面的行创建了一个对话框,我们称之为object1EthernetControlFragment.newInstance()然后 15 秒后,您再次object2使用上面的行创建一个新对话框,当您关闭它时,您也关闭了这个新对话框object2。不幸的是,您没有保留旧对话框的参考,dialog1这是真正的问题。解决方案是仅创建一个对象,因此创建类的全局引用EthernetControlFragment并仅在其为空时才对其进行初始化。这样你就只有一个对话框。

沧海一幻觉

我解决了我的问题。调用片段如下:&nbsp; &nbsp; Fragment prev = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag("ethernet");&nbsp; &nbsp; if (prev == null) {&nbsp; &nbsp; &nbsp; &nbsp; ethernetControlFragment.show(((FragmentActivity) activity).getSupportFragmentManager(), "ethernet");&nbsp; &nbsp; &nbsp; &nbsp; ethernetControlFragment.setCancelable(false);&nbsp; &nbsp; }并像这样解雇:Fragment prev = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag("ethernet");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (prev != null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; EthernetControlFragment df = (EthernetControlFragment) prev;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; df.dismiss();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }我认为这些方法是调用和消除片段最可靠的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java