Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ /
Atlas Device SDK
/

컬렉션 표시 - Java SDK

Android 앱은 종종 RecyclerView 또는 ListView 구성 요소를 사용하여 UI 를 채웁니다. Realm 영역 객체 컬렉션을 표시하는 어댑터를 제공합니다. 이러한 컬렉션은 인터페이스를 구현 OrderedRealmCollections . RealmResultsRealmList가 이러한 어댑터의 예입니다. 이러한 어댑터를 사용하면 앱 이 Realm 객체를 변경할 때 UI 구성 요소가 업데이트 .

애플리케이션 수준 build.gradle 파일에 다음 종속성을 추가합니다.

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

Realm JCenter 아티팩트 리포지토리 에서 이러한 어댑터를 호스팅합니다.jcenter Android 앱 에서 를 사용하려면 프로젝트 수준 build.gradle 파일 에 추가합니다.

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

소스 코드: GitHub의영역/realm-android-adapters.

이 페이지의 예제에서는 Item 이라는 Realm 객체를 사용합니다. 이 클래스에는 'name'이라는 문자열과 '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()

RealmBaseAdapter를 확장하여 ListView에 Realm 객체를 표시합니다.ListAdapter 어댑터는 인터페이스를 사용합니다. 구현은 다른 와 같이 ListAdapter 작동합니다. 이를 통해 자동으로 업데이트되는 Realm 객체를 지원 합니다.

ListView항목 객체를 표시하는 RealmBaseAdapter 하위 클래스입니다.

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;
}
}
}

활동에 목록 데이터를 표시하려면 ListView 인스턴스화합니다. 그런 다음 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)
}

활동에 목록 데이터를 표시하려면 ListView 인스턴스화합니다. 그런 다음 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)

RealmRecyclerViewAdapter를 확장하여 RecyclerView에 Realm 객체를 표시합니다. 어댑터가 RecyclerView.Adapter 을(를) 확장합니다. 구현은 다른 RecyclerView 어댑터처럼 작동합니다. 이를 통해 자동으로 업데이트되는 Realm 객체를 지원 합니다.

RecyclerView항목 객체를 표시하는 RealmRecyclerViewAdapter 하위 클래스입니다.

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;
}
}
}

활동에 목록 데이터를 표시하려면 RecyclerView 인스턴스화합니다. 그런 다음 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.")
}
}

활동에 목록 데이터를 표시하려면 RecyclerView 인스턴스화합니다. 그런 다음 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)

돌아가기

변경 사항에 대한 반응

이 페이지의 내용