'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 |
|---|
