Show results of a RealmResults in a Recyclerview (Android)

2

I'm trying to create an adapter to display data in a RecyclerView , but that your data provider is using the database system realm.io , that is, populate the RecyclerView from the result RealmResults of a query, list of RealmObject .

In principle you should only show data.

Does anyone have a small example of building a simple adapter using realm?

    
asked by Webserveis 27.09.2016 в 22:57
source

2 answers

2

Sorry I forgot these steps that are important:

RealmRecyclerView link

Adapter with RealmRecyclerView and Butterknife:

public class AdapterListaUsuario extends RealmBasedRecyclerViewAdapter<Pedido, AdapterListaUsuario.ViewHolder> {

    public AdapterListaUsuario(
            Context context,
            RealmResults<Pedido> realmResults,
            boolean automaticUpdate,
            boolean animateResults) {
        super(context, realmResults, automaticUpdate, animateResults);
    }

    @Override
    public ViewHolder onCreateRealmViewHolder(ViewGroup viewGroup, int i) {
        View view = inflater.inflate(R.layout.row_pedido, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindRealmViewHolder(ViewHolder viewHolder, int i) {
        final Pedido item = realmResults.get(i);
        viewHolder.fecha.setText(item.getFecha());
        viewHolder.precio.setText(String.valueOf(item.getPrecio()));
        viewHolder.tipo.setText(item.getTipo());
    }

    public class ViewHolder extends RealmViewHolder {
        @BindView(R.id.row_fecha) TextView fecha;
        @BindView(R.id.row_precio) TextView precio;
        @BindView(R.id.row_tipo) TextView tipo;
        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    } }

XML important to add app:rrvLayoutType="LinearLayout" :

<co.moonmonkeylabs.realmrecyclerview.RealmRecyclerView
    android:id="@+id/rrvListaUsuario"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:rrvLayoutType="LinearLayout"/>

Well now I'm in a fragment, I hope you do not get complicated:

public class ListaUsuarioFragment extends Fragment {
@BindView(R.id.rrvListaUsuario) RealmRecyclerView recyclerView;
private RealmResults<Pedido> listaPedidos;
private AdapterListaUsuario adapter;
private Realm realm;

public ListaUsuarioFragment() { }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_lista_usuario, container, false);
    ButterKnife.bind(this, view);
    realm = Realm.getDefaultInstance();
    listaPedidos = realm.where(Pedido.class).findAll();
    adapter = new AdapterListaUsuario(getActivity(), listaPedidos, true, true);
    recyclerView.setAdapter(adapter);
    adapter.notifyDataSetChanged();

    return view;
} }

Class Pedido :

public class Pedido extends RealmObject {
public static final String ID = "id";

@PrimaryKey
private long id;
private String fecha;
private String tipo;
private Double precio;

public long getId() {
    return id;
}

public void setId(long id) {
    this.id = id;
}

public String getFecha() {
    return fecha;
}

public void setFecha(String fecha) {
    this.fecha = fecha;
}

public String getTipo() {
    return tipo;
}

public void setTipo(String tipo) {
    this.tipo = tipo;
}

public Double getPrecio() {
    return precio;
}

public void setPrecio(Double precio) {
    this.precio = precio;
}
}
    
answered by 28.09.2016 / 02:57
source
1

Adapter with BaseAdapter and good Butterknife:

public class UsuarioAdapter extends BaseAdapter {
private Context context;
private RealmResults<Usuario> lista;

public UsuarioAdapter(Context context, RealmResults<Usuario> lista) {
    this.context = context;
    this.lista = lista;
}

@Override
public int getCount() {
    return lista.size();
}

@Override
public Object getItem(int position) {
    return lista.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

static class ViewHolder {
    @BindView(R.id.lblCorreo) TextView lblCorreo;
    @BindView(R.id.lblNombre) TextView lblNombre;
    @BindView(R.id.lblUsuario) TextView lblUsuario;

    public ViewHolder(View view) {
        ButterKnife.bind(this, view);
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder = null;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(viewHolder);
    }
    viewHolder = (ViewHolder) convertView.getTag();
    Usuario usuario = (Usuario) getItem(position);

    viewHolder.lblCorreo.setText(usuario.getCorreo());
    viewHolder.lblNombre.setText(usuario.getNombre());
    viewHolder.lblUsuario.setText(usuario.getUsuario());

    return convertView;
}}

Simple XML:

<ListView
    android:id="@+id/lvLista"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></ListView>

My activity:

public class ListadoActivity extends BaseActivity {
@BindView(R.id.lvLista) ListView lvLista;

private UsuarioAdapter adapter;
private RealmResults<Usuario> results;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listado);
    ButterKnife.bind(this);

    //Realizamos la consulta a la base de datos para traer todos los registros
    Realm realm = Realm.getDefaultInstance();
    results = realm.where(Usuario.class).findAll();
    adapter = new UsuarioAdapter(this, results);
    lvLista.setAdapter(adapter);
}

User Class:

public class Usuario extends RealmObject {

@PrimaryKey
private long id;
private String usuario;
private String correo;
private String nombre; //mas getters and setters del ide
    
answered by 27.09.2016 в 23:32