Docs Menu
Docs Home
/ /
SDK de Java

Colecciones de visualización - SDK de Java

Las aplicaciones de Android a menudo completan la interfaz de usuario mediante Vista del recicladoro componentes ListView. Realm ofrece adaptadores para mostrar colecciones de objetos de realm. Estas colecciones implementan OrderedRealmCollections Interfaz. RealmResults y RealmList son ejemplos de estos adaptadores. Con estos adaptadores, los componentes de la interfaz de usuario se actualizan cuando la aplicación modifica los objetos de Realm.

Agregue estas dependencias a su archivo de nivel de aplicación build.gradle:

dependencies {
implementation 'io.realm:android-adapters:4.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
}

Realm aloja estos adaptadores en el repositorio de artefactos de JCenter. Para usar jcenter en tu aplicación Android, añádelo al build.gradle archivo de tu proyecto:

buildscript {
repositories {
jcenter()
}
}
allprojects {
repositories {
jcenter()
}
}

Tip

Código fuente: realm/realm-android-adapters en GitHub.

Los ejemplos de esta página utilizan un objeto Realm llamado Item. Esta clase contiene una cadena llamada "nombre" y un número identificador llamado "id":

import io.realm.RealmObject;
public class Item extends RealmObject {
int id;
String name;
public Item() {}
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
import io.realm.RealmObject
open class Item(var id: Int = 0,
var name: String? = null): RealmObject()

Visualice objetos de Realm en una ListView extendiendo RealmBaseAdapter. El adaptador utiliza la ListAdapter interfaz. La implementación funciona como ListAdapter cualquier. Esto permite la actualización automática de objetos de Realm.

Subclase RealmBaseAdapter para mostrar objetos Item en ListView un:

import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.TextView;
import com.mongodb.realm.examples.model.java.Item;
import io.realm.OrderedRealmCollection;
import io.realm.RealmBaseAdapter;
class ExampleListAdapter extends RealmBaseAdapter<Item> implements ListAdapter {
String TAG = "REALM_LIST_ADAPTER";
ExampleListAdapter(OrderedRealmCollection<Item> realmResults) {
super(realmResults);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
Log.i(TAG, "Creating view holder");
// create a top-level layout for our item views
LinearLayout layout = new LinearLayout(parent.getContext());
layout.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
// create a text view to display item names
TextView titleView = new TextView(parent.getContext());
titleView.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
// attach the text view to the item view layout
layout.addView(titleView);
convertView = layout;
viewHolder = new ViewHolder(titleView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// as long as we
if (adapterData != null) {
final Item item = adapterData.get(position);
viewHolder.title.setText(item.getName());
Log.i(TAG, "Populated view holder with data: " + item.getName());
} else {
Log.e(TAG, "No data in adapter! Failed to populate view holder.");
}
return convertView;
}
private static class ViewHolder {
TextView title;
public ViewHolder(TextView textView) {
title = textView;
}
}
}

Para mostrar datos de lista en una actividad, crea una instancia de ListView. Luego, añade un ExampleListAdapter:

// instantiate a ListView programmatically
ListView listView = new ListView(activity.getApplicationContext());
listView.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
// create an adapter with a RealmResults collection
// and attach it to the ListView
ExampleListAdapter adapter =
new ExampleListAdapter(
realm.where(Item.class).findAll());
listView.setAdapter(adapter);
ViewGroup.LayoutParams layoutParams =
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
activity.addContentView(listView, layoutParams);
import android.util.Log
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.ListAdapter
import android.widget.TextView
import com.mongodb.realm.examples.model.kotlin.Item
import io.realm.OrderedRealmCollection
import io.realm.RealmBaseAdapter
internal class ExampleListAdapter(realmResults: OrderedRealmCollection<Item?>?) :
RealmBaseAdapter<Item?>(realmResults), ListAdapter {
var TAG = "REALM_LIST_ADAPTER"
override fun getView(position: Int,
convertView: View?,
parent: ViewGroup): View {
var convertView = convertView
val viewHolder: ViewHolder
if (convertView == null) {
Log.i(TAG, "Creating view holder")
// create a top-level layout for our item views
val layout = LinearLayout(parent.context)
layout.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
// create a text view to display item names
val titleView = TextView(parent.context)
titleView.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
// attach the text view to the item view layout
layout.addView(titleView)
convertView = layout
viewHolder = ViewHolder(titleView)
convertView.tag = viewHolder
} else {
viewHolder = convertView.tag as ViewHolder
}
// as long as we
if (adapterData != null) {
val item = adapterData!![position]!!
viewHolder.title.text = item.name
Log.i(TAG, "Populated view holder with data: ${item.name}")
} else {
Log.e(TAG, "No data in adapter! Failed to populate view holder.")
}
return convertView
}
private class ViewHolder(var title: TextView)
}

Para mostrar datos de lista en una actividad, crea una instancia de ListView. Luego, añade un ExampleListAdapter:

// instantiate a ListView programmatically
val listView = ListView(activity!!.applicationContext)
listView.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
// create an adapter with a RealmResults collection
// and attach it to the ListView
val adapter = ExampleListAdapter(realm.where(Item::class.java).findAll())
listView.adapter = adapter
val layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
activity!!.addContentView(listView, layoutParams)

Muestra objetos Realm en un RecyclerView extendiendo RealmRecyclerViewAdapter. El adaptador extiende RecyclerView.Adapter. La implementación funciona como cualquier adaptador de RecyclerView. Esto ofrece soporte para la actualización automática de objetos Realm.

Subclase RealmRecyclerViewAdapter para mostrar objetos Item en RecyclerView un:

import android.util.Log;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.mongodb.realm.examples.model.java.Item;
import io.realm.OrderedRealmCollection;
import io.realm.RealmRecyclerViewAdapter;
/*
* ExampleRecyclerViewAdapter: extends the Realm-provided
* RealmRecyclerViewAdapter to provide data
* for a RecyclerView to display
* Realm objects on screen to a user.
*/
class ExampleRecyclerViewAdapter
extends RealmRecyclerViewAdapter<Item,
ExampleRecyclerViewAdapter.ExampleViewHolder> {
String TAG = "REALM_RECYCLER_ADAPTER";
ExampleRecyclerViewAdapter(OrderedRealmCollection<Item> data) {
super(data, true);
Log.i(TAG, "Created RealmRecyclerViewAdapter for "
+ getData().size() + " items.");
}
@Override
public ExampleViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
Log.i(TAG, "Creating view holder");
TextView textView = new TextView(parent.getContext());
textView.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
return new ExampleViewHolder(textView);
}
@Override
public void onBindViewHolder(ExampleViewHolder holder,
int position) {
final Item obj = getItem(position);
Log.i(TAG, "Binding view holder: " + obj.getName());
holder.data = obj;
holder.title.setText(obj.getName());
}
@Override
public long getItemId(int index) {
return getItem(index).getId();
}
class ExampleViewHolder extends RecyclerView.ViewHolder {
TextView title;
public Item data;
ExampleViewHolder(TextView view) {
super(view);
title = view;
}
}
}

Para mostrar datos de lista en una actividad, crea una instancia de RecyclerView. Luego, añade un ExampleRecyclerViewAdapter:

// instantiate a RecyclerView programmatically
RecyclerView recyclerView =
new RecyclerView(activity.getApplicationContext());
recyclerView.setLayoutManager(
new LinearLayoutManager(activity.getApplicationContext()));
recyclerView.setHasFixedSize(true);
recyclerView.addItemDecoration(new DividerItemDecoration(
activity.getApplicationContext(),
DividerItemDecoration.VERTICAL));
// create an adapter with a RealmResults collection
// and attach it to the RecyclerView
ExampleRecyclerViewAdapter adapter =
new ExampleRecyclerViewAdapter(
realm.where(Item.class).findAll());
recyclerView.setAdapter(adapter);
ViewGroup.LayoutParams layoutParams =
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
activity.addContentView(recyclerView, layoutParams);
import android.util.Log
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.mongodb.realm.examples.model.kotlin.Item
import io.realm.OrderedRealmCollection
import io.realm.RealmRecyclerViewAdapter
/*
* ExampleRecyclerViewAdapter: extends the Realm-provided
* RealmRecyclerViewAdapter to provide data
* for a RecyclerView to display
* Realm objects on screen to a user.
*/
internal class ExampleRecyclerViewAdapter(data: OrderedRealmCollection<Item?>?) :
RealmRecyclerViewAdapter<Item?,
ExampleRecyclerViewAdapter.ExampleViewHolder?>(data, true) {
var TAG = "REALM_RECYCLER_ADAPTER"
override fun onCreateViewHolder(parent: ViewGroup,
viewType: Int): ExampleViewHolder {
Log.i(TAG, "Creating view holder")
val textView = TextView(parent.context)
textView.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
return ExampleViewHolder(textView)
}
override fun onBindViewHolder(holder: ExampleViewHolder, position: Int) {
val obj = getItem(position)
Log.i(TAG, "Binding view holder: ${obj!!.name}")
holder.data = obj
holder.title.text = obj.name
}
override fun getItemId(index: Int): Long {
return getItem(index)!!.id.toLong()
}
internal inner class ExampleViewHolder(var title: TextView)
: RecyclerView.ViewHolder(title) {
var data: Item? = null
}
init {
Log.i(TAG,
"Created RealmRecyclerViewAdapter for ${getData()!!.size} items.")
}
}

Para mostrar datos de lista en una actividad, crea una instancia de RecyclerView. Luego, añade un ExampleRecyclerViewAdapter:

// instantiate a RecyclerView programmatically
val recyclerView = RecyclerView(activity!!.applicationContext)
recyclerView.layoutManager =
LinearLayoutManager(activity!!.applicationContext)
recyclerView.setHasFixedSize(true)
recyclerView.addItemDecoration(
DividerItemDecoration(activity!!.applicationContext,
DividerItemDecoration.VERTICAL))
// create an adapter with a RealmResults collection
// and attach it to the RecyclerView
val adapter = ExampleRecyclerViewAdapter(realm.where(Item::class.java).findAll())
recyclerView.adapter = adapter
val layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
activity!!.addContentView(recyclerView, layoutParams)

Volver

Reaccionar a los cambios

En esta página