Android 在导航抽屉关闭之前加载片段
我已经实现了一个导航抽屉,我想在导航抽屉关闭之前加载我的片段。目前,碎片与抽屉关闭并行加载,因此如果碎片很重,用户界面会挂起一点 我的密码是:Android 在导航抽屉关闭之前加载片段,android,android-fragments,navigation,Android,Android Fragments,Navigation,我已经实现了一个导航抽屉,我想在导航抽屉关闭之前加载我的片段。目前,碎片与抽屉关闭并行加载,因此如果碎片很重,用户界面会挂起一点 我的密码是: private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View vi
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);
}
}
私有类DrawerItemClickListener实现
ListView.com侦听器{
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content\u frame,fragmentProfile);
ft.commit();
抽屉布局。关闭抽屉(抽屉视图);
}
}
如何更改此设置,以便首先看到片段加载(在后台),加载完成后,导航抽屉将关闭?DrawerLayout.DrawerListener可用于监视抽屉视图的状态和运动。 避免在动画过程中执行昂贵的操作,如布局,因为这可能会导致 口吃;在空闲状态下尝试执行昂贵的操作
换句话说,Android建议您在交换片段之前等待抽屉关闭。我的解决方案是在抽屉关闭后加载片段: 在onDrawerClosed中实际调用loadFragment方法
public void onDrawerClosed() {
// assure the request comes from selecting a menu item, not just closing tab
if (selectedTab )
selectItem(mSelectedFragment);
selectedTab = false;
}
试着在抽屉关闭后装入 使用处理程序创建延迟执行。这样抽屉关上时就不会有任何悬空了 在方法
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();因为你的碎片状态在被带到前线之前会丢失。。