Caused by: java.lang.IllegalStateException: Fragment already added

   public  void showProgressDialog() {
        Log.d(TAG, "--------------------------showProgressDialog----------------------------------");
        new Thread() {
            @Override
            public void run() {
                super.run();
                showLoadingView();//开子线程不阻塞
            }
        }.start();
    }
//利用单例锁,只要是dialog没有dismiss,那么就不再show了,只有dialog关闭了view置为null,那么就可以show,
//因为这个对象只能存在一个,这样就避免多次show对象了
    private void showLoadingView() {
        if (mGifLoadingView == null) {
            synchronized (this) {
                if (mGifLoadingView == null) {
                    mGifLoadingView = new GifLoadingView();
                    if (mGifLoadingView.isAdded()) {
                        return;
                    }
                    android.app.FragmentManager fm = getFragmentManager();
                    android.app.FragmentTransaction ft = fm.beginTransaction();
                    android.app.Fragment prev = fm.findFragmentByTag("dialog_about");
                    if (prev != null) {
                        Log.d(TAG, "------------------------------------------------------------");
                        return;
                    }
                    ft.addToBackStack(null);
                    mGifLoadingView.setCancelable(false);
                    mGifLoadingView.setImageResource(R.drawable.loading);
                    mGifLoadingView.show(getFragmentManager().beginTransaction(), "dialog_about");
                }
            }
        }
    }


    public void dismissProgressDialog() {
        Log.d(TAG, "++++++++++++++++++++++++++++++++++++隐藏了++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        if (mGifLoadingView != null) {
            mGifLoadingView.setBackGroundToNull();
        }
        android.app.FragmentManager fm = getFragmentManager();
        android.app.FragmentTransaction ft = fm.beginTransaction();
        android.app.Fragment prev = fm.findFragmentByTag("dialog_about");
        if (prev != null) {
            ft.remove(prev);
        }
        ft.addToBackStack(null);
        if (mGifLoadingView != null && mGifLoadingView.getDialog() != null) {
            Log.d(TAG, "MainActivity.run.");
            mGifLoadingView.onDismiss(mGifLoadingView.getDialog());
            mGifLoadingView = null;
        }
    }

经测试可以解决bug

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容