如何将 RealmList 更改为 RealmResult?
How to change a RealmList to RealmResult?
我正在构建一个 Java android 应用程序,我正在为我的数据库使用 realm.io。我的问题是我有一个 RealmList,而我的 Custom ListView 适配器只接受 RealmResults。下面是代码和更多细节。
我有一个聊天 class,它有一个 RealmList、RealmList、userId 和一个 chatId。
public class Chat extends RealmObject{
private RealmList<Friend> participants;
private RealmList<Message> messages;
@PrimaryKey
private String chatId;
private String userId;
...
}
在我的 activity 中,我试图显示聊天中的所有消息,我可以调用 chat.getMessages() 以获取此聊天的所有消息作为 RealmList 但我的 ListView下面的适配器采用 RealmResult 因为它扩展了 RealmBaseAdapter
public class MessageAdapter extends RealmBaseAdapter<Message> implements ListAdapter {
private String TAG = getClass().getSimpleName();
public MessageAdapter(Context context,
RealmResults<Message> realmResults,
boolean automaticUpdate) {
super(context, realmResults, automaticUpdate);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
{
convertView = inflater.inflate(R.layout.listitem_message, parent, false);
}
Message message = getRealmResults().get(position);
if (message != null)
{
((TextView) convertView.findViewById(R.id.message_content)).setText(message.getContent());
DateFormat dateFormat = new SimpleDateFormat("HH:mm", Locale.CANADA);
((TextView) convertView.findViewById(R.id.message_time)).setText(dateFormat.format(message.getTimestamp()));
}
return convertView;
}
public RealmResults<Message> getRealmResults() {
return realmResults;
}
}
这就是我所说的一切
RealmList<Message> messages = chat.getMessages();
ListView messageList = (ListView) findViewById(R.id.message_list);
adapter = new MessageAdapter(this, messages, true);
messageList.setAdapter(adapter);
如果可能的话,我愿意将我的 RealmList 更改为 RealmResult(我看过但似乎不是)或者如果我可以在自定义领域适配器中使用 RealmList 那将是另一种解决方案。任何能帮助我前进的东西都会有很大的帮助。
谢谢
RealmBaseAdapter 有一个非常简单的implementation。
所以在这种情况下,您可以将特定的 Chat
传递给您的适配器,并重载以下方法:
@Override
public int getCount() {
if (realmResults == null || realmResults.size() == 0) {
return 0;
}
return realmResults.first().getMessages().size();
}
@Override
public T getItem(int i) {
if (realmResults == null || realmResults.size() == 0) {
return null;
}
return realmResults.first().getMessages().get(i);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// You message view here
}
就这样
chat.getMessages().where().findAll()
(来自 here 的回答)
我正在构建一个 Java android 应用程序,我正在为我的数据库使用 realm.io。我的问题是我有一个 RealmList,而我的 Custom ListView 适配器只接受 RealmResults。下面是代码和更多细节。
我有一个聊天 class,它有一个 RealmList、RealmList、userId 和一个 chatId。
public class Chat extends RealmObject{
private RealmList<Friend> participants;
private RealmList<Message> messages;
@PrimaryKey
private String chatId;
private String userId;
...
}
在我的 activity 中,我试图显示聊天中的所有消息,我可以调用 chat.getMessages() 以获取此聊天的所有消息作为 RealmList 但我的 ListView下面的适配器采用 RealmResult 因为它扩展了 RealmBaseAdapter
public class MessageAdapter extends RealmBaseAdapter<Message> implements ListAdapter {
private String TAG = getClass().getSimpleName();
public MessageAdapter(Context context,
RealmResults<Message> realmResults,
boolean automaticUpdate) {
super(context, realmResults, automaticUpdate);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
{
convertView = inflater.inflate(R.layout.listitem_message, parent, false);
}
Message message = getRealmResults().get(position);
if (message != null)
{
((TextView) convertView.findViewById(R.id.message_content)).setText(message.getContent());
DateFormat dateFormat = new SimpleDateFormat("HH:mm", Locale.CANADA);
((TextView) convertView.findViewById(R.id.message_time)).setText(dateFormat.format(message.getTimestamp()));
}
return convertView;
}
public RealmResults<Message> getRealmResults() {
return realmResults;
}
}
这就是我所说的一切
RealmList<Message> messages = chat.getMessages();
ListView messageList = (ListView) findViewById(R.id.message_list);
adapter = new MessageAdapter(this, messages, true);
messageList.setAdapter(adapter);
如果可能的话,我愿意将我的 RealmList 更改为 RealmResult(我看过但似乎不是)或者如果我可以在自定义领域适配器中使用 RealmList 那将是另一种解决方案。任何能帮助我前进的东西都会有很大的帮助。
谢谢
RealmBaseAdapter 有一个非常简单的implementation。
所以在这种情况下,您可以将特定的 Chat
传递给您的适配器,并重载以下方法:
@Override
public int getCount() {
if (realmResults == null || realmResults.size() == 0) {
return 0;
}
return realmResults.first().getMessages().size();
}
@Override
public T getItem(int i) {
if (realmResults == null || realmResults.size() == 0) {
return null;
}
return realmResults.first().getMessages().get(i);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// You message view here
}
就这样
chat.getMessages().where().findAll()
(来自 here 的回答)