Android apps often populate the UI using RecyclerView or ListView components. Realm offers adapters to display realm object collections. These collections implement the OrderedRealmCollections
interface. RealmResults and RealmList are examples of these adaptors. With these adapters, UI components update when your app changes Realm objects.
Add these dependencies to your application level build.gradle
file:
dependencies { implementation 'io.realm:android-adapters:4.0.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'}
Realm hosts these adapters on the JCenter artifact repository. To use jcenter
in your Android app, add it to your project-level build.gradle
file:
buildscript { repositories { jcenter() }}allprojects { repositories { jcenter() }}
The examples on this page use a Realm object named Item
. This class contains a string named "name" and an identifier number named "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.RealmObjectopen class Item(var id: Int = 0, var name: String? = null): RealmObject()
Display Realm objects in a ListView by extending RealmBaseAdapter . The adapter uses the ListAdapter
interface. Implementation works like any ListAdapter
. This provides support for automatically-updating Realm objects.
Subclass RealmBaseAdapter
to display Item objects in a ListView
:
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"); LinearLayout layout = new LinearLayout(parent.getContext()); layout.setLayoutParams( new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); TextView titleView = new TextView(parent.getContext()); titleView.setLayoutParams( new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); layout.addView(titleView); convertView = layout; viewHolder = new ViewHolder(titleView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } 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; } }}
To display list data in an activity, instantiate a ListView
. Then, attach an ExampleListAdapter
:
ListView listView = new ListView(activity.getApplicationContext());listView.setLayoutParams( new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));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.Logimport android.view.Viewimport android.view.ViewGroupimport android.widget.LinearLayoutimport android.widget.ListAdapterimport android.widget.TextViewimport com.mongodb.realm.examples.model.kotlin.Itemimport io.realm.OrderedRealmCollectionimport io.realm.RealmBaseAdapterinternal 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") val layout = LinearLayout(parent.context) layout.layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) val titleView = TextView(parent.context) titleView.layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) layout.addView(titleView) convertView = layout viewHolder = ViewHolder(titleView) convertView.tag = viewHolder } else { viewHolder = convertView.tag as ViewHolder } 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)}
To display list data in an activity, instantiate a ListView
. Then, attach an ExampleListAdapter
:
val listView = ListView(activity!!.applicationContext)listView.layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)val adapter = ExampleListAdapter(realm.where(Item::class.java).findAll())listView.adapter = adapterval layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)activity!!.addContentView(listView, layoutParams)
Display Realm objects in a RecyclerView by extending RealmRecyclerViewAdapter . The adapter extends RecyclerView.Adapter
. Implementation works like any RecyclerView
adapter. This provides support for automatically-updating Realm objects.
Subclass RealmRecyclerViewAdapter
to display Item objects in a RecyclerView
:
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;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; } }}
To display list data in an activity, instantiate a RecyclerView
. Then, attach an ExampleRecyclerViewAdapter
:
RecyclerView recyclerView = new RecyclerView(activity.getApplicationContext());recyclerView.setLayoutManager( new LinearLayoutManager(activity.getApplicationContext()));recyclerView.setHasFixedSize(true);recyclerView.addItemDecoration(new DividerItemDecoration( activity.getApplicationContext(), DividerItemDecoration.VERTICAL));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.Logimport android.view.ViewGroupimport android.widget.TextViewimport androidx.recyclerview.widget.RecyclerViewimport com.mongodb.realm.examples.model.kotlin.Itemimport io.realm.OrderedRealmCollectionimport io.realm.RealmRecyclerViewAdapterinternal 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.") }}
To display list data in an activity, instantiate a RecyclerView
. Then, attach an ExampleRecyclerViewAdapter
:
val recyclerView = RecyclerView(activity!!.applicationContext)recyclerView.layoutManager = LinearLayoutManager(activity!!.applicationContext)recyclerView.setHasFixedSize(true)recyclerView.addItemDecoration( DividerItemDecoration(activity!!.applicationContext, DividerItemDecoration.VERTICAL))val adapter = ExampleRecyclerViewAdapter(realm.where(Item::class.java).findAll())recyclerView.adapter = adapterval layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)activity!!.addContentView(recyclerView, layoutParams)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4