Guest User

Untitled

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