Advertisement
Pugzy7117

android pokedex

Feb 28th, 2020
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. public class PokedexAdapter extends RecyclerView.Adapter<PokedexAdapter.PokedexViewHolder> implements Filterable {
  2. private List<Pokemon> pokemon = new ArrayList<>();
  3. private List<Pokemon> filtered = new ArrayList<>();
  4. private RequestQueue requestQueue;
  5.  
  6. public static class PokedexViewHolder extends RecyclerView.ViewHolder {
  7. public LinearLayout containerView;
  8. public TextView textView;
  9.  
  10.  
  11. public PokedexViewHolder(View view) {
  12. super(view);
  13.  
  14. containerView = view.findViewById(R.id.pokedex_row);
  15. textView = view.findViewById(R.id.pokedex_row_text_view);
  16.  
  17. containerView.setOnClickListener(new View.OnClickListener() {
  18. @Override
  19. public void onClick(View v) {
  20. Pokemon current = (Pokemon) containerView.getTag();
  21. Intent intent = new Intent(v.getContext(), PokemonActivity.class);
  22. intent.putExtra("url", current.getUrl());
  23.  
  24. v.getContext().startActivity(intent);
  25. }
  26. });
  27. }
  28. }
  29.  
  30. public PokedexAdapter(Context context) {
  31. requestQueue = Volley.newRequestQueue(context);
  32. loadPokemon();
  33. }
  34.  
  35. public void loadPokemon() {
  36. String url = "https://pokeapi.co/api/v2/pokemon?limit=151";
  37. JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
  38. @Override
  39. public void onResponse(JSONObject response) {
  40. try {
  41. JSONArray results = response.getJSONArray("results");
  42. for (int i = 0; i < results.length(); i++) {
  43. JSONObject result = results.getJSONObject(i);
  44. String name = result.getString("name");
  45. pokemon.add(new Pokemon(
  46. name.substring(0, 1).toUpperCase() + name.substring(1),
  47. result.getString("url")
  48. ));
  49. }
  50.  
  51. filtered = pokemon;
  52. notifyDataSetChanged();
  53. } catch (JSONException e) {
  54. Log.e("cs50", "Json error", e);
  55. }
  56. }
  57. }, new Response.ErrorListener() {
  58. @Override
  59. public void onErrorResponse(VolleyError error) {
  60. Log.e("cs50", "Pokemon list error", error);
  61. }
  62. });
  63.  
  64. requestQueue.add(request);
  65. }
  66.  
  67. @Override
  68. public PokedexViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  69. View view = LayoutInflater.from(parent.getContext())
  70. .inflate(R.layout.pokedex_row, parent, false);
  71.  
  72. return new PokedexViewHolder(view);
  73. }
  74. @Override
  75. public void onBindViewHolder(@NonNull PokedexViewHolder holder, int position) {
  76. Pokemon current = filtered.get(position);
  77. holder.textView.setText(current.getName());
  78. holder.containerView.setTag(current);
  79. }
  80.  
  81. @Override
  82. public Filter getFilter() {
  83. return new PokemonFilter();
  84. }
  85.  
  86. private class PokemonFilter extends Filter{
  87.  
  88. @Override
  89. protected FilterResults performFiltering(CharSequence constraint) {
  90. FilterResults results = new FilterResults();
  91. String filterString = constraint.toString().toLowerCase();
  92.  
  93. if (filterString.isEmpty()){
  94. results.values = pokemon;
  95. results.count = pokemon.size();
  96. } else {
  97. List<Pokemon> filteredPokemon = new ArrayList<>();
  98. for (Pokemon item : pokemon) {
  99. if (item.getName().toLowerCase().contains(filterString)) {
  100. filteredPokemon.add(item);
  101. }
  102. }
  103. results.values = filteredPokemon;
  104. results.count = filteredPokemon.size();
  105. }
  106.  
  107. return results;
  108. }
  109.  
  110. @Override
  111. protected void publishResults(CharSequence constraint, FilterResults results) {
  112. filtered = (List<Pokemon>) results.values;
  113. notifyDataSetChanged();
  114. }
  115. }
  116.  
  117. @Override
  118. public int getItemCount() {
  119. return filtered.size();
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement