make - recyclerview android kotlin
notifyDataSetChange no funciona en RecyclerView (2)
Estaba tratando de actualizar RecycleView con el método notifyDataSetChanged () en respuesta a com.google.common.eventbus.Subscribe .
Como @wmora mencionó, el problema era que el método de notificación no fue llamado en el hilo principal de la interfaz de usuario.
Lo resolví con AndroidAnnotations ''@UiThread
@UiThread
protected void dataSetChanged() {
notifyDataSetChanged();
}
que es equivalente a:
final Adapter adapter = this;
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
Nota: simplemente separa el nuevo controlador en el campo privado de la clase.
Esta pregunta ya tiene una respuesta aquí:
Estoy trabajando con el nuevo RecyclerView de Android, pero no puedo actualizar mi adaptador personalizado cada vez que llamo a uno de los métodos de "notificación".
He intentado llamar a notifyDataSetChanged, notifyItemRangeInserted y notifyItemInserted y ninguno de ellos parece funcionar.
Aquí está el código para mi adaptador personalizado. Básicamente estoy tratando de actualizar una lista de cadenas:
package com.mycompany.myapp.adapters;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.mycompany.myapp.R;
import java.util.List;
public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.ViewHolder> {
private List<String> mDataset;
public FeedAdapter(List<String> dataset) {
super();
mDataset = dataset;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
LinearLayout v = (LinearLayout) LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_feed, parent, false);
v.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.setText(mDataset.get(position));
}
@Override
public int getItemCount() {
return mDataset.size();
}
public void setDataset(List<Status> dataset) {
mDataset = dataset;
// This isn''t working
notifyItemRangeInserted(0, mDataset.size());
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView mFeedText;
public ViewHolder(View v) {
super(v);
mFeedText = (TextView) v.findViewById(R.id.feed_text);
}
private void setText(String text) {
mFeedText.setText(text);
}
}
}
¿Alguien más tiene este problema?
¡Gracias!
Mi problema fue que no estaba notificando el cambio en el hilo principal, por lo tanto, el cambio no fue visible de inmediato. Es el mismo tema señalado aquí .