Итак, я работал над классом CS50 через edx, и я на 8-й неделе, когда мы делаем Pokedex, и я работаю над этой проблемой около недели.
Я, очевидно, нахожусь на правильный путь со всеми ресурсами, которые я использовал, чтобы привести меня к этому моменту, но приложение выполняет две вещи, которые я, кажется, не могу исправить, и я знаю, что это может быть точно определено где-то в моем адаптере или в потоке logi c поиска filter.
Две вещи, которые он делает неправильно: 1. На самом деле он не фильтрует информацию в реальном времени (то есть он не показывает никакой информации, когда вы что-то вводите в строку поиска.)
И 2. Если вы удалите все символы из строки поиска, весь список исчезнет, и на экране появится отметка
Любая предоставленная помощь будет принята с благодарностью.
public class PokedexAdapter extends RecyclerView.Adapter<PokedexAdapter.PokedexViewHolder> implements Filterable {
public static class PokedexViewHolder extends RecyclerView.ViewHolder {
public LinearLayout containerView;
public TextView textView;
PokedexViewHolder(View view) {
super(view);
containerView = view.findViewById(R.id.pokedex_row);
textView = view.findViewById(R.id.pokedex_row_text_view);
containerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Pokemon current = (Pokemon) containerView.getTag();
Intent intent = new Intent(v.getContext(), PokemonActivity.class);
intent.putExtra("name", current.getName());
intent.putExtra("url", current.getUrl());
v.getContext().startActivity(intent);
}
});
}
}
private List<Pokemon> pokemon = new ArrayList<>();
private List<Pokemon> pokemonFull = new ArrayList<>(pokemon);
private RequestQueue requestQueue;
PokedexAdapter(Context context) {
requestQueue = Volley.newRequestQueue(context);
loadPokemon();
}
public void loadPokemon() {
String url = "https://pokeapi.co/api/v2/pokemon?limit=365";
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray results = response.getJSONArray("results");
for (int i = 0; i < results.length(); i++) {
JSONObject result = results.getJSONObject(i);
String name = result.getString("name");
pokemon.add(new Pokemon(
name.substring(0, 1).toUpperCase() + name.substring(1),
result.getString("url")
));
}
notifyDataSetChanged();
} catch (JSONException e) {
Log.e("cs50", "Json error", e);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("cs50", "Pokemon list error");
}
});
requestQueue.add(request);
}
@NonNull
@Override
public PokedexViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.pokedex_row, parent, false);
return new PokedexViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull PokedexViewHolder viewholder, int position){
Pokemon results = pokemon.get(position);
viewholder.textView.setText(results.getName());
viewholder.containerView.setTag(results);
}
@Override
public int getItemCount() {
return pokemon.size();
}
@Override
public Filter getFilter() {
return new PokemonFilter();
}
private class PokemonFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
// implement your search here
List<Pokemon> filteredPokemon = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredPokemon.addAll(pokemonFull);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Pokemon poke : pokemonFull) {
if (poke.getName().toLowerCase().contains(filterPattern)) {
filteredPokemon.add(poke);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredPokemon;
//results.count = filteredPokemon.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
pokemon.clear();
pokemon.addAll((List) results.values);
notifyDataSetChanged();
}
}
}
Любую другую информацию о приложении, которая может вам понадобиться, я могу предоставить своевременно. Заранее еще раз спасибо!