如何将RealmList更改为RealmResult?

时间:2015-07-30 21:08:51

标签: java android realm

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

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

public class Chat extends RealmObject{

private RealmList<Friend> participants;
private RealmList<Message> messages;

@PrimaryKey
private String chatId;
private String userId;

...
}

在我尝试显示聊天所有消息的活动中,我可以调用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。任何能帮助我前进的事情都会有很大的帮助。

感谢

2 个答案:

答案 0 :(得分:14)

只做

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

(来自here的答案)

答案 1 :(得分:1)

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
}