Sto facendo una semplice panoramica con gli elementi del film. Quando provo ad aggiungere nuovi elementi, questi non verranno visualizzati subito nel recyclerview. Per qualche motivo devo scorrere verso il basso in modo che il primo elemento sia scomparso, e poi di nuovo in alto affinché il nuovo oggetto sia visualizzato (è aggiunto all'indice 0).RecyclerView aggiorna le voci solo quando si scorre verso il basso e verso l'alto
L'adattatore:
public class MovieCardAdapter extends RecyclerView.Adapter<MovieCardAdapter.MovieViewHolder> {
List<Movie> movieList;
public MovieCardAdapter(final List<Movie> movieList) {
this.movieList = movieList;
}
public void addItem(int position, final Movie movie){
movieList.add(position,movie);
notifyItemInserted(position);
}
public void removeItem(final Movie movie){
final int indexOf = movieList.indexOf(movie);
movieList.remove(movie);
notifyItemRemoved(indexOf);
}
public void updateItems(final List<Movie> items){
movieList = items;
notifyDataSetChanged();
}
@Override
public MovieViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.
from(viewGroup.getContext()).
inflate(R.layout.movie_row, viewGroup, false);
return new MovieViewHolder(itemView);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public void onBindViewHolder(final MovieViewHolder movieViewHolder, final int i) {
final Movie movie = movieList.get(i);
String posterUrl = "";
final int posterHeight = 240;
if (!isEmpty(movie.getImdb_id())) {
posterUrl = "http://img.omdbapi.com/?i=" + movie.getImdb_id() + "&apikey="+apiKey+"&h=" + posterHeight;
} else if (!isEmpty(movie.getPoster())) {
posterUrl = movie.getPoster();
}
if (!isEmpty(posterUrl)) {
Picasso.with(movieViewHolder.context)
.load(posterUrl)
.resize(220, 354)
.centerCrop()
.into(movieViewHolder.poster);
}
movieViewHolder.title.setText(movie.getTittel());
movieViewHolder.format.setText(movie.getFormat());
if (movie.getRuntime().isEmpty() || movie.getRuntime().equalsIgnoreCase("0")){
movieViewHolder.runtime.setText("");
}else{
movieViewHolder.runtime.setText(movie.getRuntime()+" mins");
}
if (!movie.getTagline().isEmpty()) {
movieViewHolder.tagline.setText(movie.getTagline());
} else if (!movie.getPlot().isEmpty()) {
movieViewHolder.tagline.setText(movie.getPlot());
}
}
@Override
public int getItemCount() {
return movieList.size();
}
public static class MovieViewHolder extends RecyclerView.ViewHolder {
protected Context context;
protected LinearLayout movieRowLinearLayout;
protected ImageView poster;
protected TextView title;
protected TextView runtime;
protected TextView tagline;
protected TextView format;
public MovieViewHolder(View v) {
super(v);
context = v.getContext();
movieRowLinearLayout = (LinearLayout) v.findViewById(R.id.movieRowLinearLayout);
poster = (ImageView) v.findViewById(R.id.poster);
title = (TextView) v.findViewById(R.id.title);
runtime = (TextView) v.findViewById(R.id.runtime);
tagline = (TextView) v.findViewById(R.id.tagline);
format = (TextView) v.findViewById(R.id.format);
}
}
}
inizializzazione della scheda:
adapter = new MovieCardAdapter(MovieList.movies);
recyclerView.setAdapter(adapter);
Aggiungere un filmato di esempio:
if (id == R.id.add_movie) {
final Movie movie = new Movie();
movie.setTittel("0TEST");
movie.setFormat("HD-DVD");
MovieList.sortMoviesByTitle();
adapter.addItem(MovieList.movies.indexOf(movie), movie);
return true;
} else if (id == R.id.action_logOut) {
logOut(this);
}
Sry cattivo inglese, spero che qualcuno capisce e sapere cosa il problema potrebbe essere. Ho provato ad aggiungere da runOnUiThread ([...]), ma lo stesso risultato.
provato, ma l'elemento aggiunto non è "in primo piano" della recyclerView. È innanzitutto quando i primi elementi vengono "riciclati" e diventano visibili. Ho provato il debug e vedo che l'elemento è stato aggiunto alla lista nell'adattatore. –
Hmm, ha aggiornato la risposta con un altro problema nel codice. Se è ancora rotto, non esitate a inviarmi un'app o creare un bug report su b.android.com con un'app campione. – yigit
Ho aperto il progetto av https://github.com/olavbg/MyMoovs Ma funziona in corso, con molte cose che potrebbero/dovrebbero essere migliori. –