java - Android java加载 fragment 无延迟

标签 java android multithreading android-fragments load

如果用户在菜单中导航,我会使用 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/

相关文章:

java - 独立于帧率的 LibGdx 物理

android - Unity Android 键盘文本在白色背景上显示白色文本

android - 在 eclipse 中安装适用于 Java 的 Google API 客户端库

java - 为什么在模式对话框关闭之前不调用 done()?

java - 当类依赖不存在时避免崩溃

java - 在 print 语句中使用问号 if 条件

java - thymeleaf 日期格式,而每个

javascript - React native Android 给出关于 gradle 的错误

c# - 如何使用 Dispatcher 设置 Image.Source 属性?

php - 在 Windows 上使用 PHP fork /线程的最佳方法是什么?