我有一个带有活动的应用程序和3个可跳转的标签(片段)。我在选项卡中有一些大量创建的UI元素,需要一些时间才能创建,第一次运行就可以了,但每次刷卡时都会重新创建视图。
当我选择一个选项卡时,另一个选项卡调用onStop(),当我再次选择上一个选项卡时,再次调用onCreateView()并重新填充视图,这会减慢并阻止UI线程。
在ONCE标签内创建片段的正确方法是什么,并避免在其他标签之间滑动时重新创建视图?
答案 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());