1

My issue is: ui freezes when recycler view adapter start listening

my xml Code is as below

<?xml version="1.0" encoding="utf-8"?>


 <androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainAdminPackage.AdminDashboardActivity">

    <!--Navigation Drawer Setup-->
    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/home_background"
        app:headerLayout="@layout/menu_header_design"
        app:menu="@menu/main_menu" />

    <LinearLayout
        android:id="@+id/contentViewLl"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/home_background"
        android:orientation="vertical">

        <!--Navigation Menu and Fab Layout Setup-->
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="68dp"
            android:padding="20dp">

            <!--Menu Button-->
            <ImageView
                android:id="@+id/menuIcon"
                android:layout_width="48dp"
                android:layout_height="48dp"
                android:padding="4dp"
                android:layout_centerVertical="true"
                android:focusable="true"
                android:background="?attr/selectableItemBackgroundBorderless"
                android:clickable="true"
                android:src="@drawable/ic_menu_icon_dark_gray"
                app:tint="@color/icon_color"
                android:contentDescription="@null"/>

            <!--FAB Layout System-->
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/addQuestionPollCl"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toEndOf="@+id/menuIcon"
                android:minHeight="68dp">

                


            </androidx.constraintlayout.widget.ConstraintLayout>

        </RelativeLayout>

        <!--Nested Scroll View-->
        <androidx.core.widget.NestedScrollView
            android:id="@+id/dashboardNestedScrollView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <!--Main Container Layout-->
            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                

                <!--LAYOUT FOR SEARCH WINDOW AND START DIALOG-->
                <RelativeLayout
                    android:id="@+id/searchAndSloganRl"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_constraintHorizontal_bias="0"
                    app:layout_constraintVertical_bias="0"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintBottom_toBottomOf="parent">

                    

                </RelativeLayout>

                <!--CATEGORIES BUTTON-->
                <LinearLayout
                    android:id="@+id/categoryButtonsLl"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="20dp"
                    android:orientation="horizontal"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintVertical_bias="0"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/searchAndSloganRl"
                    app:layout_constraintBottom_toBottomOf="parent">


                </LinearLayout>

                <!--FEATURED COURSE LAYOUT-->
                <RelativeLayout
                    android:id="@+id/featuredCourseRl"
                    android:visibility="visible"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="40dp"
                    android:layout_marginBottom="10dp"
                    android:background="@color/banner_background_light"
                    app:layout_constraintHorizontal_bias="0"
                    app:layout_constraintVertical_bias="0"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/categoryButtonsLl"
                    app:layout_constraintBottom_toBottomOf="parent">

                    <!--Banner-->
                    <!--Recycler View for Featured Courses-->
                    <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/featuredCoursesRv"
                        android:layout_width="match_parent"
                        android:layout_height="300dp"
                        android:orientation="horizontal"
                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                        android:layout_toEndOf="@id/featuredBackground"
                        android:background="@color/home_background"
                        tools:listitem="@layout/row_featured_courses" />

                    


                </RelativeLayout>

                <!--NEWS FEED-->
                <androidx.appcompat.widget.LinearLayoutCompat
                    android:visibility="visible"
                    android:id="@+id/newsFeedMiniLlc"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    android:minHeight="100dp"
                    android:orientation="vertical"
                    app:layout_constraintHorizontal_bias="0"
                    app:layout_constraintVertical_bias="0"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/featuredCourseRl"
                    app:layout_constraintBottom_toBottomOf="parent">



                    <!--News Feed Recycler View-->
                    <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/newsFeedRv"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="10dp"
                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                        android:orientation="horizontal"
                        android:background="@color/home_background"
                        tools:listitem="@layout/row_news_feed_dashboard" />


                </androidx.appcompat.widget.LinearLayoutCompat>

                <!--NOTES CATEGORIES-->
                <androidx.appcompat.widget.LinearLayoutCompat
                    android:id="@+id/notesCategoryLlc"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    android:orientation="vertical"
                    app:layout_constraintHorizontal_bias="0"
                    app:layout_constraintVertical_bias="0"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/newsFeedMiniLlc"
                    app:layout_constraintBottom_toBottomOf="parent">

                    
                </androidx.appcompat.widget.LinearLayoutCompat>

              

                <!--ASK QUESTION RECYCLER VIEW LAYOUT-->
                <androidx.appcompat.widget.LinearLayoutCompat
                    android:id="@+id/askedQuestionMiniLlc"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="40dp"
                    android:orientation="vertical"
                    app:layout_constraintHorizontal_bias="0"
                    app:layout_constraintVertical_bias="0"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/notesCategoryLlc"
                    app:layout_constraintBottom_toBottomOf="parent">

                    
                    <!--Recycler View for Asked Questions-->
                    <androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/askQuestionRv"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                        android:orientation="vertical"
                        tools:itemCount="10"
                        android:nestedScrollingEnabled="false"
                        tools:listitem="@layout/row_asked_question" />

                      

                </androidx.appcompat.widget.LinearLayoutCompat>


            </androidx.constraintlayout.widget.ConstraintLayout>

        </androidx.core.widget.NestedScrollView>

    </LinearLayout>

</androidx.drawerlayout.widget.DrawerLayout>

java code for recycler views

//For hiding the FAB when nest scroll is scrolled
    dashboardNestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener(){
        @Override
        public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY){
            
           //For Adapters to Start listening
            if(scrollY - oldScrollY != 0) {

                if(isVisible(newsFeedMiniLlc)) {
                    indexOtherPost++;
                    if(indexOtherPost == 1) {
                        adapterNewsFeedListFireStoreDashBoard.startListening();
                        Log.d("NESTED_CHILD", "onScrollChange: indexOtherPost: " + indexOtherPost);
                    }

                }
                //Log.d("NESTED_CHILD", "onScrollChange: otherPostMiniLlc: " + isVisible(otherPostMiniLlc));

                if(isVisible(askedQuestionMiniLlc)) {
                    indexAskedQuestion++;
                    if(indexAskedQuestion == 1) {
                        adapterAskedQuestionsFireStore.startListening();
                        Log.d("NESTED_CHILD", "onScrollChange: indexAskedQuestion: " + indexAskedQuestion);
                    }

                }
                //Log.d("NESTED_CHILD", "onScrollChange: askedQuestionMiniLlc: " + isVisible(askedQuestionMiniLlc));



            }

        }
    });

//Function for getting Visibility of any View or Layout on the Screen

private static boolean isVisible(final View view) {
    if (view == null) {
        return false;
    }
    if (!view.isShown()) {
        return false;
    }
    final Rect actualPosition = new Rect();
    view.getGlobalVisibleRect(actualPosition);

    int widthPixels = Resources.getSystem().getDisplayMetrics().widthPixels;
    int heightPixels = Resources.getSystem().getDisplayMetrics().heightPixels;

    final Rect screen = new Rect(0, 0, widthPixels, heightPixels);
    return actualPosition.intersect(screen);
}






    //For LOADING ASK QUESTIONS
    private void loadAskQuestions(){
    
        //for question Recycler view
        LinearLayoutManager askQuestionLayoutManager = new LinearLayoutManager(getApplicationContext());
        askQuestionLayoutManager.setReverseLayout(false);
        askQuestionLayoutManager.setStackFromEnd(false);
        askQuestionLayoutManager.setOrientation(RecyclerView.VERTICAL);
    
        askQuestionRv.setLayoutManager(askQuestionLayoutManager);
    
        //get all Question limited to last 10 questions
        Query query = FirebaseFirestore.getInstance()
                .collection("Asked Questions")
                .orderBy("questionId", Query.Direction.DESCENDING)
                .limit(10);
    
        FirestoreRecyclerOptions<ModelAskedQuestion> options = new FirestoreRecyclerOptions.Builder<ModelAskedQuestion>()
                .setQuery(query, ModelAskedQuestion.class)
                .build();
    
        
        adapterAskedQuestionsFireStore = new AdapterAskedQuestionsFireStore(this, options);
        askQuestionRv.setAdapter(adapterAskedQuestionsFireStore);
    
    }

ui freezes when ask question recycler view adapter start listening and ui only freezes for few seconds until all data is loaded in recycler view.

Any one have any solutions ???

More elaboration of the Issue:

1)I have three recycler view under this layout: Two top most Horizontal and last one Vertical in direction.

2)As this is my main dashboard. I have put nested scroll view listener for adapters to start listening when the particular layout containing that recycler view appears on the screen. Top most two adapters and their corresponding recycler views are working perfectly fine. But when the last recycler view which is vertical in Direction, appears on the screen, It freezes the entire UI, as its adapter starts listening, for few seconds(aprrox. 1-2 seconds). In this, adapter loads only last 10 items from the server.

I have tried:

1). Fixing the hieght of recyler view.

2). Fixing the height of Layout containing that recycler view.

3). Changed the Main Container Layout From Linear Layout to Constraint Layout.(As It was suggested in one of the comments under that thread(mentioned at the end of this thread)).

4). Tried android:nestedScrollingEnabled="false".

5). Tried app:layout_behavior="@string/appbar_scrolling_view_behavior".

Nothing has worked for this particular problem.

How to get rid of this this freezing of Ui. It should kept scrolling along the items get recycled in recycler view.

It could be same question asked in this thread. RecyclerView inside NestedScrollview alternative

Pawan Kumar
  • 211
  • 2
  • 12
  • If you encounter problems, it's best to create a [MCVE](https://stackoverflow.com/help/mcve) when posting a question. You posted almost **500 (five hundred)** lines of code for this issue. That's a lot for people to parse and try to debug online. Please edit your question and isolate the problem, in that way you increase your chances of being helped. – Alex Mamo Aug 28 '21 at 09:27
  • Earlier I posted the same question under this thread https://stackoverflow.com/questions/64135899/recyclerview-inside-nestedscrollview-alternative. This thread question was having the same problem. Many of comment under that thread had asked about the complete xml code of particular problem to be posted. I had asked this question by posting xml code which is 30% of actual xml code. To get rectify the issue I had to post the related codes in this question. – Pawan Kumar Aug 29 '21 at 11:19
  • @AlexMamo If You have any suggestion regarding this issue or if you know anybody who can help me out for this, It would be more helpful. – Pawan Kumar Aug 29 '21 at 11:49

0 Answers0