Java 安卓滞后片段转换

Java 安卓滞后片段转换,java,android,android-fragments,animation,Java,Android,Android Fragments,Animation,基本上我有一个应用程序,只有一个活动和5个片段。因为创建片段布局需要花费一秒钟的时间,所以我改变了我的方法,使它不会重新创建片段,而只是隐藏和显示它们 private void openFragment(int index) { if(index == activeFragment) { return; } FragmentTransaction ft = getSupportFragmentManager().beginTransaction(

基本上我有一个应用程序,只有一个活动和5个片段。因为创建片段布局需要花费一秒钟的时间,所以我改变了我的方法,使它不会重新创建片段,而只是隐藏和显示它们

private void openFragment(int index)
{
    if(index == activeFragment)
    {
        return;
    }

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

    //Set animations
    if(activeFragment < index)
    {
        ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
    } else {
        ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
    }

    //Hide old Fragment
    if (Fragments.get(activeFragment).isAdded())
    {
        ft.hide(Fragments.get(activeFragment));
        Fragments.get(activeFragment).getView().setTranslationZ(0);
    }

    //Add/Show new Fragment
    if (Fragments.get(index).isAdded()) 
    { // if the fragment is already in container
        ft.show(Fragments.get(index));
        Fragments.get(index).getView().setTranslationZ(1f);
    } else { // fragment needs to be added to frame container
        ft.add(R.id.fragment_container, Fragments.get(index), Integer.toString(index));
    }

    // Commit changes
    ft.commit();
}
private void openFragment(int索引)
{
如果(索引==activeFragment)
{
返回;
}
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
//设置动画
if(activeFragment
问题是,即使我更改为只有一个
RecyclerView
和10个项目的片段,动画也会结巴。如果我第一次启动片段,加载也需要很长时间,即使我在
OnCreate
方法中创建了片段(这需要很长时间,因为它正在将片段添加到片段容器中?对于只有
RecyclerView
的容器,需要半秒钟)。但是,如果我不设置任何转换,片段将立即显示,只需一个小延迟(可能是30毫秒,甚至不值得一提)。为什么主线程被动画淹没了,它不需要创建任何视图,只是淡出一个片段,淡出另一个片段


如何处理片段,以便能够在尽可能低的延迟的情况下在它们之间平滑地过渡?我使用
BottomNavigationView
在片段中导航,因此它必须立即打开,这就是我保存片段的原因。

如果使用导航方法,您是否也会有同样的体验?请参见此处:我看到的与您相同,可能是过渡动画与创建recyclerview时执行的设置navigaion“冲突”。RG@RoarGrønmo不仅仅是使用recycleviews,网络视图更糟糕10倍。如果第一次使用webview打开片段,它将滞后0.3秒的动画,下一次仅滞后0.15秒。我没有用导航组件尝试过,因为如果我删除动画,它看起来就不会过时。事实上,碎片几乎立刻交换,这很奇怪。如果没有动画,它看起来要快得多。我最终使用了一个contentloadingprogressbar,实际上我遇到了问题。它并没有解决根本原因,但现在是公平的。即使使用导航组件也会遇到同样的问题。不得不使用处理程序将数据添加到recyclerview适配器的时间延迟了300毫秒,结果成功了。但是,如果有ScrollView或WebView,它仍然不顺畅。我发现最好的方法是完全删除转换。这样就不会出现滞后过渡,新片段可能需要50-100毫秒才能打开,这比口吃过渡要好得多。