2015-07-30 4 views
6

Ich baue eine Java Android App und ich benutze realm.io für meine Datenbank. Mein Problem ist, dass ich eine RealmList habe und mein Custom ListView Adapter nur RealmResults akzeptiert. Unten finden Sie den Code und weitere Details.Wie ändere ich eine RealmList in RealmResult?

Ich habe eine Chat-Klasse, die eine RealmList, RealmList, userId und eine ChatId hat.

public class Chat extends RealmObject{ 

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

@PrimaryKey 
private String chatId; 
private String userId; 

... 
} 

In meiner Tätigkeit, wo ich alle Nachrichten angezeigt Ich versuche, dass der Chat hat, kann ich chat.getMessages nennen() für diesen Chat als Realmlist alle Nachrichten zu bekommen, aber mein Listview-Adapter nimmt unten ein RealmResult weil es 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; 
} 
} 

Hier erstreckt, wo ich es nennen alle

RealmList<Message> messages = chat.getMessages(); 

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

ich bin offen meine Realmlist zu einem RealmResult zu ändern, wenn möglich (ich ausgesehen haben nd es scheint nicht zu sein) oder Wenn ich eine RealmList im benutzerdefinierten Realm-Adapter verwenden kann, würde das eine andere Lösung sein. Alles, was mir helfen würde voranzukommen, wäre eine große Hilfe.

dank

Antwort

12

Just do

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

(Antwort von here)

1

RealmBaseAdapter hat eine sehr einfache implementation.

So im Fall können Sie die spezifische Chat an Sie weitergeben Adapter und Überlastung unterhalb Methoden:

@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 
} 
+0

dies tun , verwaltet es automatischesUpdate für Objekt in Relation? – BlackRabbit

+0

Ja, tut es. Wenn sich das Objekt in Relation ändert, wird auch der changeListener ausgelöst. Und 'RealmBaseAdapter.notifyDataSetChanged' wird aufgerufen. – beeender

+0

Was bedeutet 'T'? weil ich – Hunt