2015-07-30 5 views
6

Я создаю приложение для Android Java, и я использую realm.io для своей базы данных. Моя проблема заключается в том, что у меня есть RealmList, и мой пользовательский адаптер ListView принимает только RealmResults. Ниже приведен код и более подробная информация.Как изменить RealmList на RealmResult?

У меня есть класс чата, который имеет 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 в пользовательском адаптере realm, который будет другим решением. Все, что поможет мне продвинуться вперед, будет большой помощью.

благодаря

ответ

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

Выполнение этого , управляет ли он автоматическимUpdate для объекта? – BlackRabbit

+0

Да, да. Когда изменяется связанный объект, будет активирован changeListener. И вызывается 'RealmBaseAdapter.notifyDataSetChanged'. – beeender

+0

Что означает 'T'? потому что я получаю несовместимую ошибку возвращаемого типа – Hunt

Смежные вопросы