Android Preload Recycleview内容

时间:2015-10-20 14:01:15

标签: android performance android-recyclerview preload android-cardview

我使用ViewPager设置了三个标签界面。在第3个选项卡中,我有一个可以展开/缩进的CardView,以显示更多信息。 CardView内部是一个RecyclerView,它充斥着一堆数据。

第一次打开应用程序并展开CardView时,展开动画非常滞后,但之后可以平滑地展开/缩回。 RecyclerView数据也可以毫无问题地更新。

有没有办法在打开应用程序时以某种方式加载/缓存数据,因此不会发生lagg。

对不起,如果问题很糟糕,只需启动android开发。 感谢

第三个标签上的布局:

<android.support.v7.widget.CardView
    android:id="@+id/SF_frame"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp">

    <LinearLayout
        android:id="@+id/SF_wrapper"
        android:layout_width="fill_parent"
        android:layout_height="80dp"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/SF_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </android.support.v7.widget.RecyclerView>
    </LinearLayout>
</android.support.v7.widget.CardView>

用于给recyclerView充气的数据是一个对象列表,每个对象都有2个浮点变量。大约长约50。

用于给每个项目充气的xml:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="4sp"
    android:orientation="horizontal">

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="36sp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/value_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="lorem"
            android:textSize="8sp" />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="36sp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/value_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="ipsom"
            android:textSize="8sp" />

     </RelativeLayout>
</LinearLayout>

扩展/收回cardView的代码只是动画更改SF_frame的高度以显示RecyclerView的更多元素,这是第一个显示滞后的内容。

1 个答案:

答案 0 :(得分:1)

首先解决你的Layouting: 仅对文本使用B = [2 5 7] C = 10; n = 3; r = ones(1,C); r(B) = n; A = repelem(1:C, r) ,对其他尺寸(宽度,高度,边距,填充等)使用sp。对于文本,建议至少使用dp。请查看android:textsize="12sp"属性而不是android:gravity,这样您就不必使用父布局来居中。

android:layout_gravity

在此布局中,如果要扩展RecyclerView,可能会实例化新视图(<android.support.v7.widget.CardView android:id="@+id/SF_frame" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp"> <!-- No need to use LinearLayout since only one child is used --> <android.support.v7.widget.RecyclerView android:id="@+id/SF_list" android:layout_width="match_parent" android:layout_height="80dp"> </android.support.v7.widget.RecyclerView> </android.support.v7.widget.CardView> RecyclerView.Adapter.onCreateViewHolder)多次。 实际上切换到该Tab也有点延迟,但它在动画中清晰可见。 (你从大约3个项目扩展到大约20个左右,我不知道你的布局看起来怎么样了)

和第二:

RecyclerView.Adapter.onBindViewHolder

如果填充这两个<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="4dp" android:orientation="horizontal"> <TextView android:id="@+id/value_1" android:layout_width="0dp" android:layout_height="36dp" android:layout_weight="1" android:layout_gravity="center" android:text="lorem" android:textSize="8sp" /> <TextView android:id="@+id/value_2" android:layout_width="0dp" android:layout_height="36dp" android:layout_weight="1" android:layout_gravity="center" android:text="ipsom" android:textSize="8sp" /> </LinearLayout> 的速度非常慢,那么你正在经历一些追赶。那么你可能正在进行非常复杂的数学运算(尽可能尝试简化它们),或者你以某种方式同步下载数据并等待结果。

请查看AsyncTask并在绑定数据时使用它...您可以使用类似这样的内容(自行修改):

TextViews