寻找提高RecyclerView性能的方法

时间:2015-10-22 02:24:39

标签: java android adapter android-recyclerview lag

我有一个非常复杂的视图,在RecyclerView中有许多移动部件,带有适配器,负责显示两种不同的视图类型,并从列表中“隐藏”对象以创建“折叠”注释。代码全部工作,它显示正常,但它在向下或向上的flings上变得非常滞后,我真的找不到简化代码和/或视图的方法。这是所有代码和视图的链接

Comment.xml(查看) https://github.com/ccrama/Slide/blob/master/app/src/main/res/layout/comment.xml

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

    android:layout_height="wrap_content"

    android:clipChildren="false"


    android:orientation="vertical"

    android:scrollbars="none">

    <LinearLayout
        android:id="@+id/next"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="8dp"
        android:elevation="8dp"
        android:orientation="horizontal" />

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/card_background"
        android:clipChildren="false"
        android:orientation="vertical"
        android:paddingBottom="0dp"
        android:scrollbars="none">


            <LinearLayout
                android:id="@+id/padd"

                android:layout_width="match_parent"
                android:layout_height="wrap_content"


                android:orientation="horizontal"
                android:paddingBottom="0dp"
                android:scrollbars="none">



                    <LinearLayout
                        android:id="@+id/dots"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:background="?attr/activity_background"
                        android:orientation="horizontal">


                    </LinearLayout>

                    <include
                        android:id="@+id/dot"
                        layout="@layout/dot" />


                <include
                    android:id="@+id/side"
                    layout="@layout/dot"
                    android:layout_width="wrap_content"

                    android:layout_height="match_parent"
                    android:paddingRight="15dp" />


                <LinearLayout
                    android:id="@+id/background"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:paddingLeft="16dp"
                    android:paddingRight="16dp"

                    android:paddingTop="8dp"

                    >


                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">

                        <RelativeLayout
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"

                            >

                            <include
                                android:id="@+id/children"
                                layout="@layout/commentnumber"
                                android:layout_width="wrap_content"

                                android:layout_height="16dp"
                                android:layout_alignParentRight="true"
                                android:layout_marginLeft="10dp"
                                android:gravity="center_horizontal"
                                android:orientation="horizontal" />


                            <com.wefika.flowlayout.FlowLayout
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_gravity="center_vertical"
                                android:gravity="center_vertical"
                                android:orientation="horizontal"
                                android:paddingRight="10dp">

                                <TextView
                                    android:id="@+id/author"
                                    android:layout_width="wrap_content"
                                    android:layout_height="16dp"
                                    android:layout_gravity="center_vertical"

                                    android:paddingLeft="5dp"
                                    android:paddingRight="5dp"
                                    android:text="ccrama"

                                    android:textColor="?attr/font"
                                    android:textSize="?attr/font_commenttitle"
                                    android:textStyle="bold"

                                    />

                                <TextView
                                    android:id="@+id/score"
                                    android:layout_width="wrap_content"
                                    android:layout_height="16dp"

                                    android:layout_gravity="center_vertical"
                                    android:paddingLeft="5dp"
                                    android:paddingRight="5dp"
                                    android:text="+49"
                                    android:textColor="?attr/font"
                                    android:textSize="?attr/font_commentinfo"

                                    android:textStyle="bold" />

                                <TextView
                                    android:id="@+id/time"
                                    android:layout_width="wrap_content"
                                    android:layout_height="16dp"

                                    android:layout_alignParentRight="true"
                                    android:layout_gravity="center_vertical"
                                    android:paddingLeft="5dp"
                                    android:paddingRight="5dp"
                                    android:text="4 hours ago"

                                    android:textColor="?attr/font"

                                    android:textSize="?attr/font_commentinfo" />

                                <include
                                    android:id="@+id/gild"
                                    layout="@layout/gilded"
                                    android:layout_width="wrap_content"
                                    android:layout_height="16dp"

                                    android:layout_gravity="center_vertical"
                                    android:gravity="center_horizontal"
                                    android:orientation="horizontal"
                                    android:paddingLeft="5dp"
                                    android:paddingRight="5dp" />

                                <include
                                    android:id="@+id/flairbubble"
                                    layout="@layout/flair"
                                    android:layout_width="wrap_content"
                                    android:layout_height="16dp"

                                    android:layout_gravity="center_vertical"
                                    android:layout_margin="5dp"

                                    android:layout_toRightOf="@+id/pinned"
                                    android:paddingLeft="5dp"
                                    android:paddingRight="5dp"
                                    android:src="@drawable/pinned" />

                                <include
                                    android:id="@+id/you"
                                    layout="@layout/you"
                                    android:layout_width="wrap_content"
                                    android:layout_height="16dp"

                                    android:layout_centerVertical="true"
                                    android:layout_gravity="center_vertical"

                                    android:layout_toRightOf="@+id/pinned"
                                    android:paddingLeft="5dp"
                                    android:paddingRight="5dp"
                                    android:src="@drawable/pinned" />

                                <include
                                    android:id="@+id/op"
                                    layout="@layout/op"
                                    android:layout_width="wrap_content"
                                    android:layout_height="16dp"

                                    android:layout_centerVertical="true"
                                    android:layout_gravity="center_vertical"

                                    android:layout_toRightOf="@+id/pinned"
                                    android:paddingLeft="5dp"
                                    android:paddingRight="5dp"
                                    android:src="@drawable/pinned" />
                            </com.wefika.flowlayout.FlowLayout>
                        </RelativeLayout>


                        <me.ccrama.redditslide.ActiveTextView
                            android:id="@+id/content"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:paddingBottom="16dp"

                            android:textColor="?attr/font"
                            android:textSize="?attr/font_commentbody" />


                    </LinearLayout>

                </LinearLayout>

            </LinearLayout>



        <LinearLayout
            android:id="@+id/menu"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:orientation="horizontal"
            android:visibility="gone"
            android:weightSum="4">

            <ImageView
                android:id="@+id/more"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:background="?android:selectableItemBackground"
                android:padding="12dp"
                android:src="@drawable/more"


                android:tint="?attr/tint" />


            <ImageView
                android:id="@+id/downvote"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:background="?android:selectableItemBackground"
                android:padding="12dp"

                android:src="@drawable/downvoteicon"
                android:tint="?attr/tint" />

            <ImageView
                android:id="@+id/upvote"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:background="?android:selectableItemBackground"
                android:padding="12dp"
                android:src="@drawable/upvoteicon"

                android:tint="?attr/tint" />

            <ImageView
                android:id="@+id/reply"
                android:layout_width="0dp"
                android:layout_height="48dp"
                android:layout_weight="1"
                android:background="?android:selectableItemBackground"
                android:padding="12dp"

                android:src="@drawable/reply"
                android:tint="?attr/tint" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/replyArea"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="16dp"
            android:visibility="gone">

            <EditText
                android:id="@+id/replyLine"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:backgroundTint="?attr/tint"
                android:hint="Reply"
                android:imeOptions="actionDone|flagNoEnterAction"
                android:inputType="textMultiLine|textAutoCorrect|textCapSentences"
                android:minHeight="30dp"
                android:textColor="?attr/font"
                android:textColorHint="?attr/font" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/discard"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="?android:selectableItemBackground"
                    android:padding="4dp"

                    android:text="DISCARD"
                    android:textColor="?attr/font"
                    android:textSize="14sp"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/send"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:background="?android:selectableItemBackground"
                    android:padding="4dp"

                    android:text="SUBMIT"
                    android:textColor="?attr/font"

                    android:textSize="14sp"
                    android:textStyle="bold" />
            </RelativeLayout>

            <LinearLayout
                android:id="@+id/innersend2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginLeft="-6dp"
                android:layout_marginRight="-6dp"
                android:alpha=".56"

                android:gravity="center"
                android:orientation="horizontal"

                android:weightSum="8">

                <ImageButton
                    android:id="@+id/imagerep"
                    android:layout_width="0dp"
                    android:layout_height="48dp"
                    android:layout_weight="1"
                    android:height="48dp"
                    android:background="#00000000"
                    android:cropToPadding="false"
                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/image"
                    android:tint="?attr/tint" />


                <ImageButton
                    android:id="@+id/link"
                    android:layout_width="0dp"
                    android:layout_height="48dp"
                    android:layout_weight="1"

                    android:height="48dp"
                    android:background="#00000000"
                    android:cropToPadding="false"
                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/link"
                    android:tint="?attr/tint" />

                <ImageButton
                    android:id="@+id/bold"
                    android:layout_width="0dp"
                    android:layout_height="48dp"
                    android:layout_weight="1"
                    android:height="48dp"
                    android:background="#00000000"

                    android:cropToPadding="false"
                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/bold"
                    android:tint="?attr/tint" />

                <ImageButton
                    android:id="@+id/italics"
                    android:layout_width="0dp"
                    android:layout_height="48dp"
                    android:layout_weight="1"

                    android:height="48dp"
                    android:background="#00000000"
                    android:cropToPadding="false"
                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/italics"
                    android:tint="?attr/tint" />

                <ImageButton
                    android:id="@+id/bulletlist"
                    android:layout_width="0dp"
                    android:layout_height="48dp"
                    android:layout_weight="1"
                    android:height="48dp"
                    android:background="#00000000"
                    android:cropToPadding="false"

                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/bullets"
                    android:tint="?attr/tint" />

                <ImageButton
                    android:id="@+id/numlist"
                    android:layout_width="0dp"
                    android:layout_height="48dp"
                    android:layout_weight="1"
                    android:height="48dp"
                    android:background="#00000000"

                    android:cropToPadding="false"
                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/numbers"
                    android:tint="?attr/tint" />

                <ImageButton
                    android:id="@+id/quote"
                    android:layout_width="0dp"

                    android:layout_height="48dp"
                    android:layout_weight="1"
                    android:height="48dp"
                    android:background="#00000000"
                    android:cropToPadding="false"
                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/quotes"
                    android:tint="?attr/tint" />

                <ImageButton
                    android:id="@+id/size"
                    android:layout_width="0dp"

                    android:layout_height="48dp"
                    android:layout_weight="1"
                    android:height="48dp"
                    android:background="#00000000"
                    android:cropToPadding="false"
                    android:padding="8dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/fontsizedarker"
                    android:tint="?attr/tint" />
            </LinearLayout>
        </LinearLayout>


    </LinearLayout>


</LinearLayout>

正如您所看到的,这是一个非常复杂的视图,包含3个主要部分。顶部的“注释”区域始终可见,菜单可切换可见性,回复区域的可见性很少使用,但仍可切换。

Here is a link to the adapter

Here is a link to the view the adapter is in(可能会有帮助!)

我希望这个问题有点简单,但我真的无法弄清楚如何使代码变得更简单。

我已采取措施解决滞后问题: 删除注释适配器中的所有代码,仍然明显滞后 从视图中删除菜单和回复区域,改进但仍然很慢。

非常感谢任何帮助/建议!谢谢!

编辑:这是有问题滞后的视频https://vid.me/kxrC

0 个答案:

没有答案