MessageList
MessageList — это список сообщений в интерфейсе чата, который можно полностью настроить. Если вы не определяете свой стиль, MessageList будет использовать стиль по умолчанию.
Мы поддерживаем несколько способов добавления зависимостей. Вы можете выбрать один из них:
compile 'cn.jiguang.imui:imui:0.1.0'
<dependency>
<groupId>cn.jiguang.imui</groupId>
<artifactId>imui</artifactId>
<version>0.1.0</version>
<type>pom</type>
</dependency>
// Add in project's build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
// Add in module's build.gradle
dependencies {
compile 'com.github.jpush:imui:0.1.0'
}
Чтобы использовать MessageList, нужно выполнить три простых шага или вы можете проверить наш пример проекта, чтобы попробовать его самостоятельно.
<cn.jiguang.imui.messages.MessageList
android:id="@+id/msg_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:avatarHeight="50dp"
app:avatarWidth="50dp"
app:bubbleMaxWidth="0.70"
app:dateTextSize="14sp"
app:receiveBubblePaddingLeft="20dp"
app:receiveBubblePaddingRight="10dp"
app:receiveTextColor="#ffffff"
app:receiveTextSize="18sp"
app:sendBubblePaddingLeft="10dp"
app:sendBubblePaddingRight="20dp"
app:sendTextColor="#7587A8"
app:sendTextSize="18sp" />
Мы определили множество атрибутов для поддержки настройки пользователем своего макета. Подробнее см. attrs.xml. Мы также полностью поддерживаем настройку стиля, пожалуйста, смотрите ниже.
У конструктора адаптера есть три параметра. Первый — sender id
, идентификатор отправителя. Второй — HoldersConfig object
, вы можете использовать этот объект для создания собственного ViewHolder и макета. Третий — реализация ImageLoader
, используется для отображения аватара пользователя. Если это значение равно нулю, аватар отображаться не будет. (Подробнее об ImageLoader)
MsgListAdapter adapter = new MsgListAdapter<MyMessage>("0", holdersConfig, imageLoader);
messageList.setAdapter(adapter);
Чтобы добавить сообщения, вам необходимо реализовать интерфейсы IMessage и IUser в вашей существующей модели и переопределить их методы:
public class MyMessage implements IMessage {
private long id;
private String text;
private String timeString;
private MessageType type;
private IUser user;
private String contentFile;
private long duration;
public MyMessage(String text, MessageType type) {
this.text = text;
this.type = type;
this.id = UUID.randomUUID().getLeastSignificantBits();
}
@Override
public String getMsgId() {
return String.valueOf(id);
}
@Override
public IUser getFromUser() {
if (user == null) {
return new DefaultUser("0", "user1", null);
}
return user;
}
public void setUserInfo(IUser user) {
this.user = user;
}
public void setMediaFilePath(String path) {
this.contentFile = path;
}
public void setDuration(long duration) {
this.duration = duration;
}
@Override
public long getDuration() {
return duration;
}
public void setTimeString(String timeString) {
this.timeString = timeString;
}
@Override
public String getTimeString() {
return timeString;
}
@Override
public MessageType getType() {
return type;
}
@Override
public String getText() {
return text;
}
@Override
public String getMediaFilePath() {
return contentFile;
}
}
MessageType выше — это класс enum в классе IMessage. Вам также необходимо реализовать интерфейс IUser:
public class DefaultUser implements IUser {
private String id;
private String displayName;
private
``` Вот перевод текста на русский язык:
String avatar;
public DefaultUser(String id, String displayName, String avatar) { this.id = id; this.displayName = displayName; this.avatar = avatar; }
@Override public String getId() { return id; }
@Override public String getDisplayName() { return displayName; }
@Override public String getAvatarFilePath() { return avatar; } }
Это всё! Теперь вы можете использовать свою собственную модель сообщений для заполнения адаптера без какого-либо преобразования типов!
## Управление данными
### Добавление новых сообщений
Добавить новое сообщение в список сообщений довольно просто, мы поддерживаем два способа добавления новых сообщений:
- Добавить новое сообщение внизу списка сообщений: `addToStart(IMESSAGE message, boolean scroll)`
// добавляем новое сообщение внизу списка сообщений, второй параметр подразумевает прокрутку до конца. adapter.addToStart(message, true);
- Добавлять сообщения вверху списка сообщений (обычно этот метод используется для загрузки последней страницы истории сообщений): `addToEnd(List<IMessage> messages)`
// Добавляем сообщения в начало списка сообщений adapter.addToEnd(messages);
- Прокрутка для загрузки исторических сообщений
После добавления этого слушателя: `OnLoadMoreListener`, при прокрутке вверх будет срабатывать событие `onLoadMore`, например:
mAdapter.setOnLoadMoreListener(new MsgListAdapter.OnLoadMoreListener() { @Override public void onLoadMore(int page, int totalCount) { if (totalCount < mData.size()) { new Handler().postDelayed(new Runnable() { @Override public void run() { mAdapter.addToEnd(mData); } }, 1000); } } });
### Удаление сообщения
Вот методы удаления сообщения:
- *adapter.deleteById(String id)*: удаление по идентификатору сообщения
- *adapter.deleteByIds(String[] ids)*: удаление по массиву идентификаторов сообщений
- *adapter.delete(IMessage message)*: удаление согласно объекту сообщения
- *adapter.delete(List<IMessage> messages)*: удаление согласно списку объектов сообщений
- *adapter.clear()*: удаление всех сообщений
### Обновление сообщения
Если сообщение обновлено, вы можете вызвать эти методы, чтобы уведомить адаптер об обновлении сообщения:
- *adapter.update(IMessage message)*: сообщение, которое нужно обновить
- *adapter.update(String oldId, IMessage newMessage)*
## Обработка событий
- `OnMsgClickListener` срабатывает при нажатии на сообщение
mAdapter.setOnMsgClickListener(new MsgListAdapter.OnMsgClickListener() { @Override public void onMessageClick(MyMessage message) { // делаем что-то } });
- `OnAvatarClickListener` срабатывает при клике на аватар
mAdapter.setOnAvatarClickListener(new MsgListAdapter.OnAvatarClickListener() { @Override public void onAvatarClick(MyMessage message) { DefaultUser userInfo = (DefaultUser) message.getUserInfo(); // Делаем что-то } });
- `OnMsgLongClickListener` срабатывает при долгом нажатии на сообщение
mAdapter.setMsgLongClickListener(new MsgListAdapter.OnMsgLongClickListener() { @Override public void onMessageLongClick(MyMessage message) { // делаем что-то } });
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )