Docs Menu
Docs Home
/ /
Atlas Device SDK
/

컬렉션 표시 - Java SDK

이 페이지의 내용

  • 어댑터 설치
  • 예제 모델
  • ListView에 collection 표시
  • RecyclerView에 collection 표시

Android 앱은 종종 RecyclerView 를 사용하여 UI 를 채웁니다. 또는 ListView 구성 요소. 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 에서 이러한 어댑터를 호스팅합니다. 아티팩트 리포지토리. Android 앱에서 jcenter 를 사용하려면 프로젝트 수준 build.gradle 파일에 추가합니다.

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

다음도 참조하세요.

소스 코드: 영역/realm-android-adapters 에서 Github.

이 페이지의 예제에서는 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()

ListView 에 Realm 객체 표시 RealmBaseAdapter 를 확장하여 . 어댑터는 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)

RecyclerView 에 Realm 객체 표시 RealmRecyclerViewAdapter 를 확장하여 . 어댑터는 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)

돌아가기

변경 사항에 대한 반응