多次充气相同的视图 - 更快的方式?

时间:2014-03-06 17:36:34

标签: android android-inflate findviewbyid

关于SO的第一个问题,如果我忘记包含某些内容,请原谅我。

在我的活动中,我有一个函数可以加载一个新的活动,该活动具有带有两个片段的选项卡式ViewPager。根据我的理解(或者更确切地说,从我所知道的),在两个选项卡完成onCreateViews()函数之前,活动不会加载。目前,这需要500ms-2000ms,这使得应用程序感觉相当笨重。我相信这给了我两个选择:

  1. 让活动加载并在第一个标签完成后显示第一个标签onCreateView()
  2. 优选地,加速第二突片/片段的装载。我正在做的事情非常缓慢,我正在寻找一种更好的方法。
  3. 以下是我的代码中第二个片段(标签)的摘录:

    @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独有的。

    有什么想法吗?

0 个答案:

没有答案