0

我有可能在滚动视图中显示大量元素。

滚动视图位于 viewflipper 内,因此仅当用户点击按钮翻转视图时才会创建滚动视图。

我为需要显示的每个条目动态添加一个“行”,并相应地填充该行。

当我要显示大量元素时,滚动视图需要很长时间才能实例化。

滚动视图如下所示:

<framelayout>
...
<linear layout>
...
<viewflipper>
...

           <ScrollView
            android:id="@+id/scroll_view_viewflip"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="75dip" >

            <LinearLayout
                android:id="@+id/scroll_view_linear"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
            </LinearLayout>
        </ScrollView>

我用如下所示的行填充滚动视图:(单独的 XML 布局)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<TextView
    android:id="@+id/tv_name"
    style="@style/SearchTableColumn"
    android:layout_weight="25" />

<TextView
    android:id="@+id/tv_value"
    style="@style/SearchTableColumn"
    android:layout_weight="25" />

<EditText
    android:id="@+id/et_value"
    style="@style/SearchTableColumn"
    android:layout_weight="25" />

<NumberPicker         
    android:id="@+id/picker_value"
    style="@style/SearchTableColumn"
    android:layout_weight="25" />

<Spinner
    android:id="@+id/spin_value"
    style="@style/SearchTableColumn"
    android:layout_weight="25" />

<TextView
    android:id="@+id/tv_units"
    style="@style/SearchTableColumn"
    android:layout_weight="25" />

代码或多或少是:

LinearLayout row = (LinearLayout) layoutInflater.inflate(R.layout.attribute_row, null);
// multiple row.findViewById() for the elements on the row
// set up which element will be shown or hidden and set values
layout.addView(row);

通过跟踪,大部分时间似乎都在 inflater/inflate() 函数中。

我可以在 XML 中或在我的行创建中做些什么来提高速度吗?我们正在谈论可能有 100 行。其他问题表明列表视图对性能来说不是一个好主意,而且我的数据有点像树视图(但对使用第 3 方树视图控件不感兴趣)。

我可以实现一个异步任务来在后台填充滚动视图,并在按下视图翻转按钮时添加同步逻辑以“等待”,但想知道是否有更好的选择。

4

0 回答 0