'Hide RecyclerView until List is sorted

When my RecyclerView loads it shows the unsorted list for a few milliseconds and then switches to the sorted list.

Here is a video what it looks like: https://drive.google.com/file/d/14UnS54S9JNp9VPYxIOAHIiPnJjksdYOL/view

Does anyone know how i can fix this?

Thanks in advance!

This is my code:

package com.example.thecryptoapp11;

import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.SystemClock;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Collections;

public class Fragment_Track extends Fragment {

    View view;
    private EditText searchEDT;
    private RecyclerView currenciesRV;
    private ArrayList<TrackRVModal> currencyRVModalArrayList;
    private TrackRVAdapter currencyRVAdapter;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.fragment_track, container, false);
        searchEDT = (EditText) view.findViewById(R.id.idEdtSearch);
        currenciesRV = (RecyclerView) view.findViewById(R.id.idRVCurrencies);
        RecyclerView.LayoutManager recyce = new LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false);
        currenciesRV.setLayoutManager(recyce);
        currencyRVModalArrayList = new ArrayList<>();
        currencyRVAdapter = new TrackRVAdapter(currencyRVModalArrayList, requireContext());
        currenciesRV.setAdapter(currencyRVAdapter);
        getCurrencyDataPage();





        searchEDT.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                filterCurrencies(editable.toString());

            }
        });


        return view;


    }

    private void filterCurrencies(String currency) {
        ArrayList<TrackRVModal> filteredList = new ArrayList<>();
        for (TrackRVModal item : currencyRVModalArrayList) {
            if (item.getName().toLowerCase().contains(currency.toLowerCase())) {
                filteredList.add(item);
            }
        }
        if (filteredList.isEmpty()) {
            //Toast.makeText(requireContext(), "No Currency found...", Toast.LENGTH_SHORT).show();
        } else {
            currencyRVAdapter.filterList(filteredList);
        }

    }

    private void getCurrencyDataPage() {

        for(int i=1; i<=3; i++) {

            String url = "https://api.coingecko.com/api/v3/coins/markets?vs_currency=eur&order=market_cap_desc&per_page=250&page="+i+"&sparkline=false";
            RequestQueue requestQueue = Volley.newRequestQueue(requireContext());
            int finalI = i;
            JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    try {

                        for (int i = 0; i < response.length(); i++) {
                            // Get current json object
                            JSONObject currency = response.getJSONObject(i);

                            String name = currency.getString("name");
                            String symbol = currency.getString("symbol").toUpperCase();
                            String image_url = currency.getString("image");
                            int ID = currency.getInt("market_cap_rank");
                            double price = currency.getDouble("current_price");


                            currencyRVModalArrayList.add(new TrackRVModal(name, symbol, price, ID, image_url));

                        }

                        Collections.sort(currencyRVModalArrayList, TrackRVModal.TrackRVModalIDComparator);
                        currencyRVAdapter.notifyDataSetChanged();




                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(requireContext(), "Error", Toast.LENGTH_SHORT).show();
                }
            });
            requestQueue.add(jsonArrayRequest);
        }
    }


}

The Comparator:

    public static Comparator<TrackRVModal> TrackRVModalIDComparator = new Comparator<TrackRVModal>() {
        @Override
        public int compare(TrackRVModal currency1, TrackRVModal currency2) {
            return currency1.getID() - currency2.getID();
        }
    };


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source