如何在选项卡中滑动时避免使用onCreateView()

时间:2013-06-03 13:50:00

标签: android android-layout android-fragments android-tabs

我有一个带有活动的应用程序和3个可跳转的标签(片段)。我在选项卡中有一些大量创建的UI元素,需要一些时间才能创建,第一次运行就可以了,但每次刷卡时都会重新创建视图。

当我选择一个选项卡时,另一个选项卡调用onStop(),当我再次选择上一个选项卡时,再次调用onCreateView()并重新填充视图,这会减慢并阻止UI线程。

在ONCE标签内创建片段的正确方法是什么,并避免在其他标签之间滑动时重新创建视图?

3 个答案:

答案 0 :(得分:16)

要添加CommnosWare所说的内容,如果您使用的是视图寻呼机,您只需拨打mViewPager.setOffscreenPageLimit(3);即可将所有三个保留在内存中。但是如果你的用户界面太重,你可能会注意到一些情况。因此,请尝试修改您的UI设置代码。

答案 1 :(得分:2)

  

我在标签内部创建了一些重要的UI元素,需要一些时间才能创建

如果“某个时间”超过约5毫秒,您的应用程序就会崩溃并需要修复。使用Traceview确定您花费时间的确切位置,然后修复问题,以便在主应用程序线程上花费更少的时间。

  

在标签ONCE中创建片段的正确方法是什么,并避免在其他标签之间滑动时重新创建视图?

AFAIK,FragmentPagerAdapter不应该具有您所描述的效果(尽管FragmentStatePagerAdapter会)。但是,如果您修复了onCreateView()效果问题,即使FragmentStatePagerAdapter也不会发布问题。

答案 2 :(得分:0)

只需在TabAdapter声明的主要Fragment / Activity类中添加以下代码。

$("input[type='checkbox']").on('click', function(){

        var checkBox_value = $(this).val();

        if($(this).is(':checked')){
            $('div').append('<input type="text" name="input_'+checkBox_value+'" value="'+checkBox_value+'"');   
        }
        else{
            $("input[name='input_"+checkBox_value+"']").remove();
        }

    });

tabLayout和viewPager如下

viewPager.setOffscreenPageLimit(tabLayout.getTabCount());