如果用户在菜单中导航,我会使用 fragment 来更改用户界面。我的问题是,每次一个 fragment 被另一个 fragment 替换时,应用程序都会卡住一秒钟,因为它正在主线程上处理。 我读过有关使用线程在后台处理事物的信息,但是如果一个 fragment 被另一个 fragment 替换,你就不能这样做,因为它必须在主线程中加载。
那么,有没有办法在后台加载 fragment 以防止用户在菜单中导航时出现延迟?
希望你们理解我,我尽力了。 盖革类
编辑:对于遇到同样问题的任何人:Mo Adel 的建议和此链接帮助我解决了问题 Optimizing drawer and activity launching speed
最佳答案
如果您从幻灯片菜单或选项卡更改它 你可以在你的 Activity 中使用这个方法来做到这一点
public void switchContent(final Fragment fragment) {
mContent = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
sm.showContent();
}
}, 50);
}
并将其添加到 menu_fragment 或其他用于更改 fragment 的 fragment
我的是一个 ListFragment 所以我做什么
@Override
public void onListItemClick(ListView lv, View v, int pos, long id) {
ma.setSelecteIndex(pos , v);
((Menu_Adapter)lv.getAdapter()).notifyDataSetChanged();
Fragment newContent;
if(pos==0){
newContent = new HomeFragment();
}else if(pos==1){
newContent = StoresFragment.NewInstance(pos);
}else{
newContent = DinningFragment.NewInstance(pos);
}
if (newContent != null)
switchFragment(newContent);
}
// the meat of switching the above fragment
private void switchFragment(Fragment fragment) {
if (getActivity() == null)
return;
if (getActivity() instanceof CustomAnimation) {
CustomAnimation ra = (CustomAnimation) getActivity();
ra.switchContent(fragment);
}
}
关于java - Android java加载 fragment 无延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539516/