在我的活动中,我有一个函数可以加载一个新的活动,该活动具有带有两个片段的选项卡式ViewPager。根据我的理解(或者更确切地说,从我所知道的),在两个选项卡完成onCreateViews()函数之前,活动不会加载。目前,这需要500ms-2000ms,这使得应用程序感觉相当笨重。我相信这给了我两个选择:
以下是我的代码中第二个片段(标签)的摘录:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root_view = inflater.inflate(R.layout.stats_layout, container, false);
for (Map.Entry<String, int[]> entry : stats.entrySet()) {
String key = entry.getKey();
int[] value = entry.getValue();
if (value[2] == 1) {
LinearLayout ll_singles = (LinearLayout) root_view.findViewById(R.id.ll_singles_stats);
RelativeLayout rl_detail = (RelativeLayout) inflater.inflate(R.layout.rl_detail, ll_singles, false);
( (TextView) rl_detail.findViewById(R.id.tv_made) ).setText(Integer.toString(value[0]));
( (TextView) rl_detail.findViewById(R.id.tv_total) ).setText(Integer.toString(value[0] + value[1]));
( (TextView) rl_detail.findViewById(R.id.tv_percent) ).setText(MessageFormat.format("{0,number,0.00%}", (float) value[0] / (value[0] + value[1])));
ll_singles.addView(rl_detail);
}
}
如果没有对我的整个布局过于具体(除非有人问),我会将单个RelativeLayout( rl_detail )充气多次(50+)并将其添加到四个不同的LinearLayouts(在此摘录中,的 ll_singles )。
我知道 findViewById()是一个昂贵的操作,我不得不认为有一种方法可以避免每当我更改文本时每次膨胀完全相同的视图时所做的findViewById()对于TextView。
我已经探索过asynctasks(无法找到一个在背景中膨胀视图的例子 - 听起来似乎不可能)并考虑使用ViewHolder,但这似乎是ListViews独有的。
有什么想法吗?