Recycler просматривает начальную задержку при прокрутке

#android #android-studio #android-recyclerview

#Android #android-studio #android-recyclerview

Вопрос:

Итак, у меня есть довольно простой вид ресайклера, где элементы находятся в CardViews. Изображения не загружаются, это просто данные, представленные на CardViews. Когда данные загружаются с сервера, при попытке прокрутки, хотя изначально она начинает отставать. через некоторое время задержка исчезла. Что может быть не так? Мой код адаптера выглядит следующим образом.

 public class TeacherJobBoardAdapter extends
    RecyclerView.Adapter<TeacherJobBoardAdapter.ViewHolder> {


public class ViewHolder extends RecyclerView.ViewHolder {
   
    TextView salary, location,numberOfStudents,curriculum,teacherGender,class1,class2,gender1,gender2,daysInWeek, std1Subject, std2Subject,time;
    LinearLayout linearLayoutStd2;
    ImageView doneTick;
    CardView v;
    SlideToActView slider;
    AnimatedVectorDrawable animated;
    Context context;
    
    public ViewHolder(View itemView, Context context) {
        
        super(itemView);
        this.context = context;
        v = itemView.findViewById(R.id.card);
        slider = itemView.findViewById(R.id.slider_teacherJobBoard);

        doneTick = itemView.findViewById(R.id.doneTick_teacherJobBoard);
        animated = (AnimatedVectorDrawable) doneTick.getDrawable();

        numberOfStudents = itemView.findViewById(R.id.spn_teacherJobBoard_numberOfStudents);
        linearLayoutStd2 = itemView.findViewById(R.id.linlayout_teacherJobBoard_std2);
        location = itemView.findViewById(R.id.txt_teacherJobBoard_location);
        salary = itemView.findViewById(R.id.txt_teacherJobBoard_salary);
        curriculum = itemView.findViewById(R.id.txt_teacherJobBoard_curriculum);
        class1 = itemView.findViewById(R.id.txt_teacherJobBoard_std1Class);
        class2 = itemView.findViewById(R.id.txt_teacherJobBoard_std2Class);
        gender1 = itemView.findViewById(R.id.txt_teacherJobBoard_std1Gender);
        gender2 = itemView.findViewById(R.id.txt_teacherJobBoard_std2Gender);
        teacherGender = itemView.findViewById(R.id.txt_teacherJobBoard_tutorGender);
        daysInWeek = itemView.findViewById(R.id.txt_teacherJobBoard_daysInWeek);
        std1Subject = itemView.findViewById(R.id.txt_teacherJobBoard_std1Subject);
        std2Subject = itemView.findViewById(R.id.txt_teacherJobBoard_std2Subject);
        time = itemView.findViewById(R.id.txt_teacherJobBoard_time);
    }


}


private List<ParseObject> mObjects;

public TeacherJobBoardAdapter(List<ParseObject> object) {
    mObjects = object;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);

    // Inflate the custom layout
    View contactView = inflater.inflate(R.layout.item_teacher_job_board, parent, false);

    // Return a new holder instance
    return new ViewHolder(contactView,context);
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int pos) {
    int position = pos;
    holder.salary.setText("" mObjects.get(pos).getInt("salary"));
    holder.location.setText(mObjects.get(pos).getString("location"));
    holder.numberOfStudents.setText(mObjects.get(pos).getInt("numberOfStudents") "");
    holder.curriculum.setText(mObjects.get(pos).getString("curriculum"));
    holder.teacherGender.setText(mObjects.get(pos).getString("teacherGender"));

    if (mObjects.get(pos).getInt("numberOfStudents")==1){
        holder.linearLayoutStd2.setVisibility(View.GONE);
    }else{
        holder.gender2.setText(mObjects.get(pos).getString("gender2"));
        holder.class2.setText(mObjects.get(pos).getString("class2"));
        holder.std2Subject.setText(mObjects.get(pos).getString("subject2") "");
    }
    holder.gender1.setText(mObjects.get(pos).getString("gender1"));
    holder.class1.setText(mObjects.get(pos).getString("class1"));
    holder.std1Subject.setText(mObjects.get(pos).getString("subject1") "");


    holder.daysInWeek.setText(mObjects.get(pos).getInt("daysInWeek") "");
    holder.time.setText(mObjects.get(pos).getString("time"));

    holder.slider.setOnSlideCompleteListener(new SlideToActView.OnSlideCompleteListener() {
        @Override
        public void onSlideComplete(SlideToActView slideToActView) {
            TeacherJobBoard myActivity = (TeacherJobBoard) holder.context;
            myActivity.apply(slideToActView,holder.doneTick,holder.animated);
        }
    });
}

@Override
public int getItemCount() {
    return mObjects.size();
}
}
  

Вот XML для макета элементов

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <androidx.cardview.widget.CardView
        android:id="@ id/card"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="@dimen/_4sdp"
        android:layout_marginRight="@dimen/_4sdp"
        app:cardBackgroundColor="#FFFFFF"
        app:cardCornerRadius="@dimen/_5sdp"
        app:cardElevation="@dimen/_3sdp"
        app:cardUseCompatPadding="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical"
            android:weightSum="10">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:weightSum="3">


                <TextView
                    android:id="@ id/txt_teacherJobBoard_location"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="2"
                    android:fontFamily="@font/kiona_regular"
                    android:paddingLeft="@dimen/_8sdp"
                    android:paddingTop="@dimen/_8sdp"
                    android:paddingBottom="@dimen/_8sdp"
                    android:text="ADABOR"
                    android:textColor="@color/tutor_bear_dark_blue"
                    android:textSize="@dimen/_20sdp" />

                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="end"
                        android:layout_weight="1"
                        android:fontFamily="@font/kiona_regular"
                        android:paddingTop="@dimen/_8sdp"
                        android:paddingEnd="@dimen/_8sdp"
                        android:text="SALARY"
                        android:textAlignment="textEnd"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_20sdp" />


                    <TextView
                        android:id="@ id/txt_teacherJobBoard_salary"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="end"
                        android:layout_weight="1"
                        android:drawableEnd="@drawable/ic_taka"
                        android:fontFamily="@font/kiona_regular"
                        android:paddingBottom="@dimen/_8sdp"
                        android:text="9000"
                        android:textAlignment="textEnd"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_20sdp" />


                </LinearLayout>


            </LinearLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="@dimen/_1sdp"
                android:layout_marginLeft="@dimen/_10sdp"
                android:layout_marginRight="@dimen/_10sdp"
                android:background="@color/tutor_bear_dark_blue" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/_2sdp"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginTop="@dimen/_7sdp"
                    android:orientation="horizontal"
                    android:weightSum="2">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:fontFamily="@font/roboto_light"
                        android:paddingStart="@dimen/_7sdp"
                        android:text="@string/studentViewMyPost_numberOfStudents"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />

                    <TextView
                        android:id="@ id/spn_teacherJobBoard_numberOfStudents"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:fontFamily="@font/roboto_light"
                        android:paddingEnd="@dimen/_7sdp"
                        android:text="2"
                        android:textAlignment="textEnd"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />


                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginTop="@dimen/_6sdp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="@font/roboto_light"
                        android:paddingLeft="@dimen/_7sdp"
                        android:text="@string/teacherJobBoard_curriculum"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />


                    <TextView
                        android:id="@ id/txt_teacherJobBoard_curriculum"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="@font/roboto_light"
                        android:paddingEnd="@dimen/_7sdp"
                        android:text="English Medium"
                        android:textAlignment="textEnd"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />


                </LinearLayout>


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/_7sdp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:fontFamily="@font/roboto_light"
                        android:paddingStart="@dimen/_7sdp"
                        android:text="Student 1"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:orientation="vertical">


                        <TextView
                            android:id="@ id/txt_teacherJobBoard_std1Subject"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="end"
                            android:fontFamily="@font/roboto_light"
                            android:paddingEnd="@dimen/_7sdp"
                            android:text="Physics, Chemistry, Maths, Psycology"
                            android:textAlignment="textEnd"
                            android:textColor="@color/tutor_bear_dark_blue"
                            android:textSize="@dimen/_13sdp" />

                        <TextView
                            android:id="@ id/txt_teacherJobBoard_std1Gender"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="end"
                            android:layout_marginTop="@dimen/_3sdp"
                            android:drawableStart="@drawable/ic_male"
                            android:fontFamily="@font/roboto_light"
                            android:paddingEnd="@dimen/_7sdp"
                            android:text="Male"
                            android:textAlignment="textEnd"
                            android:textColor="@color/tutor_bear_dark_blue"
                            android:textSize="@dimen/_13sdp" />

                        <TextView
                            android:id="@ id/txt_teacherJobBoard_std1Class"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="end"
                            android:layout_marginTop="@dimen/_3sdp"
                            android:layout_marginBottom="@dimen/_3sdp"
                            android:fontFamily="@font/roboto_light"
                            android:paddingEnd="@dimen/_7sdp"
                            android:text="Class 8"
                            android:textAlignment="textEnd"
                            android:textColor="@color/tutor_bear_dark_blue"
                            android:textSize="@dimen/_13sdp" />


                    </LinearLayout>


                </LinearLayout>


                <LinearLayout
                    android:id="@ id/linlayout_teacherJobBoard_std2"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/_7sdp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:fontFamily="@font/roboto_light"
                        android:paddingStart="@dimen/_7sdp"
                        android:text="Student 2"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="1"
                        android:orientation="vertical">


                        <TextView
                            android:id="@ id/txt_teacherJobBoard_std2Subject"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="end"
                            android:fontFamily="@font/roboto_light"
                            android:paddingEnd="@dimen/_7sdp"
                            android:text="Physics, Chemistry, Maths, Psycology"
                            android:textAlignment="textEnd"
                            android:textColor="@color/tutor_bear_dark_blue"
                            android:textSize="@dimen/_13sdp" />

                        <TextView
                            android:id="@ id/txt_teacherJobBoard_std2Gender"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="end"
                            android:layout_marginTop="@dimen/_3sdp"
                            android:drawableStart="@drawable/ic_male"
                            android:fontFamily="@font/roboto_light"
                            android:paddingEnd="@dimen/_7sdp"
                            android:text="Male"
                            android:textAlignment="textEnd"
                            android:textColor="@color/tutor_bear_dark_blue"
                            android:textSize="@dimen/_13sdp" />

                        <TextView
                            android:id="@ id/txt_teacherJobBoard_std2Class"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="end"
                            android:layout_marginTop="@dimen/_3sdp"
                            android:layout_marginBottom="@dimen/_3sdp"
                            android:fontFamily="@font/roboto_light"
                            android:paddingEnd="@dimen/_7sdp"
                            android:text="Class 8"
                            android:textAlignment="textEnd"
                            android:textColor="@color/tutor_bear_dark_blue"
                            android:textSize="@dimen/_13sdp" />


                    </LinearLayout>


                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginTop="@dimen/_6sdp"
                    android:orientation="horizontal">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="@font/roboto_light"
                        android:paddingLeft="@dimen/_7sdp"
                        android:text="@string/studentViewMyPost_preferredTutorGender"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />


                    <TextView
                        android:id="@ id/txt_teacherJobBoard_tutorGender"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:drawableStart="@drawable/ic_female"
                        android:fontFamily="@font/roboto_light"
                        android:paddingEnd="@dimen/_7sdp"
                        android:text="Female"
                        android:textAlignment="textEnd"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />


                </LinearLayout>


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginTop="@dimen/_6sdp"
                    android:orientation="horizontal">

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

                        android:fontFamily="@font/roboto_light"
                        android:paddingLeft="@dimen/_7sdp"
                        android:text="@string/studentViewMyPost_daysInWeek"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />


                    <TextView
                        android:id="@ id/txt_teacherJobBoard_daysInWeek"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:drawableStart="@drawable/ic_calender"
                        android:fontFamily="@font/roboto_light"
                        android:paddingEnd="@dimen/_7sdp"
                        android:text="5"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />
                </LinearLayout>


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginTop="@dimen/_6sdp"
                    android:layout_marginBottom="@dimen/_8sdp"
                    android:orientation="horizontal">

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

                        android:fontFamily="@font/roboto_light"
                        android:paddingLeft="@dimen/_7sdp"
                        android:text="@string/studentViewMyPost_preferredTime"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />

                    <View
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:layout_weight="1" />


                    <TextView
                        android:id="@ id/txt_teacherJobBoard_time"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:drawableStart="@drawable/ic_time_new"
                        android:fontFamily="@font/roboto_light"
                        android:paddingEnd="@dimen/_7sdp"
                        android:text="9:00 PM - 6:00 AM"
                        android:textColor="@color/tutor_bear_dark_blue"
                        android:textSize="@dimen/_13sdp" />
                </LinearLayout>

                <com.ncorti.slidetoact.SlideToActView
                    android:id="@ id/slider_teacherJobBoard"
                    android:layout_width="@dimen/_220sdp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="@dimen/_10sdp"
                    android:layout_marginBottom="@dimen/_10sdp"
                    android:clickable="false"
                    android:hapticFeedbackEnabled="true"
                    app:animation_duration="250"
                    app:area_margin="@dimen/_5sdp"
                    app:bump_vibration="60"
                    app:complete_icon="@drawable/anim_loading_spinner"
                    app:icon_margin="@dimen/_5sdp"
                    app:inner_color="@color/color_white"
                    app:outer_color="@color/tutor_bear_dark_blue"
                    app:slider_height="@dimen/_40sdp"
                    app:slider_icon="@drawable/ic_next_arrow"
                    app:text="Slide to Apply" />

                <ImageView
                    android:id="@ id/doneTick_teacherJobBoard"
                    android:layout_width="@dimen/_40sdp"
                    android:layout_height="@dimen/_40sdp"
                    android:layout_gravity="center"
                    android:layout_marginTop="@dimen/_10sdp"
                    android:layout_marginBottom="@dimen/_10sdp"
                    android:src="@drawable/done_tick_new_anim"
                    android:visibility="gone" />
            </LinearLayout>
    </LinearLayout>
    </androidx.cardview.widget.CardView>
    </LinearLayout>
  

Ответ №1:

Попробуйте создать релизную сборку приложения. Отладочные сборки часто отображают незначительную задержку анимации.

Комментарии:

1. Нет, но вы не включили ту часть кода, в которой выполняли сетевой вызов. если вы делаете это в основном потоке, это может быть причиной. Но я думаю, что это, скорее всего, только из-за сборки отладки.

2. Сетевой запрос находится в рабочем потоке. Итак, после небольшого исследования я обнаружил, что задержки возникают в первых 6 элементах. И при прокрутке этих элементов вызывается onCreateViewHolder. После этого все проходит гладко. Таким образом, при каждом вызове onCreate для адаптера происходит задержка. Есть предложения?

3. Я предлагаю попробовать сборку релиза. Я потратил несколько дней, пытаясь оптимизировать RecyclerView, прежде чем понял, что у него не было никаких проблем при сборке релиза.

4. Блин, гениальное решение. Никаких задержек при сборке релиза. Но как и почему? Это просто смущает нас, разработчиков.

5. Я думаю, что релизная сборка исключает все функции отладки и просто в целом оптимизирует код.