如何将RealmList更改为RealmResult?

我正在构建一个Java android应用程序,我正在使用realm.io作为我的数据库。 我的问题是我有一个RealmList,我的自定义ListView适配器只接受RealmResults。 以下是代码和更多详细信息。

我有一个Chat类,它有一个RealmList,RealmList,userId和一个chatId。

public class Chat extends RealmObject{ private RealmList participants; private RealmList messages; @PrimaryKey private String chatId; private String userId; ... } 

在我尝试显示聊天所有消息的活动中,我可以调用chat.getMessages()来获取此聊天的所有消息作为RealmList但下面的ListView适配器采用RealmResult,因为它扩展了RealmBaseAdapter

 public class MessageAdapter extends RealmBaseAdapter implements ListAdapter { private String TAG = getClass().getSimpleName(); public MessageAdapter(Context context, RealmResults 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 getRealmResults() { return realmResults; } } 

这就是我所说的全部

 RealmList messages = chat.getMessages(); ListView messageList = (ListView) findViewById(R.id.message_list); adapter = new MessageAdapter(this, messages, true); messageList.setAdapter(adapter); 

如果可能的话,我愿意将我的RealmList更改为RealmResult(我看起来似乎并不是这样)或者如果我可以在自定义域适配器中使用RealmList,那将是另一种解决方案。 任何能帮助我前进的事情都会有很大的帮助。

谢谢

做就是了

 chat.getMessages().where().findAll() 

(从这里回答)

RealmBaseAdapter的实现非常简单。

因此,在这种情况下,您可以将特定的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 }