<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      DialogFragment異常Fragment already added的原因與解決辦法

      DialogFragment異常的表現形式
      快速多次點擊按鈕展示DialogFragment彈框,100%復現崩潰

      java.lang.IllegalStateException: Fragment already added: XXDialogFragment

      DialogFragment異常的發生原因

      查看DialogFragment的show方法源碼,發現每次show的時候都會提交一個add fragment的事務。

      DialogFragment.java

      public void show(FragmentManager manager, String tag) {
          this.mDismissed = false;
          this.mShownByMe = true;
          FragmentTransaction ft = manager.beginTransaction();
          ft.add(this, tag);
          ft.commit();
      }

      當快速多次點擊按鈕時,短時間內調用多次show方法,添加多個add事務(add事務A、add事務B等)。然后系統在執行事務隊列時,在執行了addFragment后,發現又要add這個Fragment,即拋出異常:

      FragmentManagerImpl.java

      public void addFragment(Fragment fragment, boolean moveToStateNow) {
          if (DEBUG) {
              Log.v("FragmentManager", "add: " + fragment);
          }
      
          this.makeActive(fragment);
          if (!fragment.mDetached) {
              if (this.mAdded.contains(fragment)) {
                  throw new IllegalStateException("Fragment already added: " + fragment);
              }
      
              synchronized(this.mAdded) {
                  this.mAdded.add(fragment);
              }
      
              fragment.mAdded = true;
              ...
          }
      
      }

      DialogFragment異常的解決辦法

      既然知道異常的原因是“執行了多次show方法,添加了多個連續的add事務”。那就改寫下show方法,讓add事務不連續,每次add之前都把原來的remove掉。解決代碼如下:

      public class ActivityDialogFragment extends DialogFragment {
          
          @Override
          public void show(FragmentManager manager, String tag) {
              if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN) {
                  if (manager.isDestroyed())
                      return;
              }
              try {
                  //在每個add事務前增加一個remove事務,防止連續的add
                  manager.beginTransaction().remove(this).commit();
                  super.show(manager, tag);
              } catch (Exception e) {
                  //同一實例使用不同的tag會異常,這里捕獲一下
                  e.printStackTrace();
              }
          }
      }
      posted @ 2021-01-08 00:12  ganzhijie  閱讀(1590)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久热这里只有精品12| 成人精品老熟妇一区二区| 天堂a无码a无线孕交| 在线亚洲妇色中文色综合| 宿州市| 日韩不卡一区二区在线观看| 亚洲国产精品高清线久久| 少妇高潮潮喷到猛进猛出小说| 小雪被老外黑人撑破了视频| 久久天天躁狠狠躁夜夜躁2012| 亚洲天堂亚洲天堂亚洲天堂| 最近2019免费中文字幕8| 亚洲性无码av在线| 丁香五月婷激情综合第九色| 97成人碰碰久久人人超级碰oo| 一区二区三区四区黄色片| 色伦专区97中文字幕| 成人AV专区精品无码国产| 国产超高清麻豆精品传媒麻豆精品| 777米奇影视第四色| 精品乱人伦一区二区三区| 色九月亚洲综合网| 亚洲精品无码你懂的网站| 日韩丝袜欧美人妻制服| 免费大片av手机看片高清 | 国产羞羞的视频一区二区| 久久国产自拍一区二区三区| 你拍自拍亚洲一区二区三区| 国产精品中文av专线| 亚洲午夜成人精品电影在线观看| 黑人av无码一区| 国产成年码av片在线观看| 亚洲精品国产一二三区| 国产午夜精品福利免费看| 老司机午夜精品视频资源| 永久免费无码av在线网站| 国产99久久无码精品| 日本一区二区三本视频在线观看| 老司机免费的精品视频| 江永县| 亚洲sm另类一区二区三区|