【问题标题】:Load Fragment before Navigation Drawer closes在导航抽屉关闭之前加载片段
【发布时间】:2013-08-31 14:19:37
【问题描述】:

我已经实现了一个导航抽屉,我想在导航抽屉关闭之前加载我的片段。目前,fragment 与抽屉关闭并行加载,因此如果 fragment 很重,用户界面会挂起一段时间。

我的代码是:

private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
                 FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                 ft.replace(R.id.content_frame, fragmentProfile);
                 ft.commit();
                 drawerLayout.closeDrawer(drawerNaviListView);
        }
    }

如何更改此设置,以便我首先看到我的片段加载(在后台),当它完成加载时,导航抽屉关闭?

【问题讨论】:

    标签: android android-fragments navigation


    【解决方案1】:

    我的解决方案是在抽屉关闭后加载片段: 实际上在onDrawerClosed里面调用loadFragment方法

     public void onDrawerClosed() {
    
     // assure the request comes from selecting a menu item, not just closing tab
     if (selectedTab ) 
         selectItem(mSelectedFragment);
         selectedTab = false;
     }
    

    【讨论】:

      【解决方案2】:

      在抽屉关闭后尝试加载 使用处理程序创建延迟执行。这样抽屉关闭时就不会挂起

      在方法onItemClick()中,使用下面的代码:

      Handler handler = new Handler();
      
      Runnable runnable = new Runnable() {
      
                  @Override
                  public void run() {
                      FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                   ft.replace(R.id.content_frame, fragmentProfile);
                   ft.commit();
      
                  }
              };
      
              handler.postDelayed(runnable, 500); // here 500 is the delay 
      

      // 其他方式是

      创建一个 AsyncTask 并在 doInBackground() 方法中启动片段事务并在 onPostExecute() 中关闭抽屉

      【讨论】:

      • 上述解决方案是正确的,但是将ft.commit()替换为ft.commitAllowingStateLoss();因为你的片段状态在出现之前将是损失..
      【解决方案3】:

      DrawerLayout.DrawerListener 可用于监控抽屉视图的状态和运动。 避免在动画期间执行昂贵的操作,例如布局,因为这可能会导致 口吃;尝试在 STATE_IDLE 状态期间执行昂贵的操作。 Source.

      换句话说,Android 建议您在交换 Fragments 之前等待抽屉关闭。

      【讨论】:

        猜你喜欢
        • 2014-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 2016-01-03
        • 1970-01-01
        相关资源
        最近更新 更多