Есть ListView в котором отображается история сообщений.
Так же есть SimpleAdapter
adapter = new SimpleAdapter(getContext(), messageList, R.layout.left_item,
new String[] { "text", "time" }, new int[] {R.id.messageText, R.id.timeText });
messageListView.setAdapter(adapter);
Сейчас в ListView добавляется соответственно R.layout.left_item
Вопрос:
Как можно добавить R.layout_right_item вместо R.layout_left_item
Сейчас добавляю сообщения так.
public void addMessageLeft(String text, String time) {
HashMap<String, String> message = new HashMap<>();
message.put("text", text);
message.put("time", time);
messageList.add(message);
}
Где messageList является ArrayList<HashMap<String, String>>.
Пробовал задать новый адаптер, но тогда все предыдущие левые сообщения заменяются на правые.
Ещё пробовал использовать adapter.setDropDownViewResource(R.layout.right_item); но я так понял это тут не поможет.
Для решения этой проблемы, пришлось полностью скопировать код класса SimpleApapter в новый класс, т.к private View createViewFromResource() нельзя переопределить.
Изменения которые я внёс:
Добавил поле
private ArrayList<Integer> mArrayList;
Дополнил конструктор:
public MessageAdapter(Context context, List<? extends Map<String, ?>> data,
@LayoutRes int resource, String[] from, @IdRes int[] to, ArrayList<Integer> arrayList) {
mData = data;
mResource = mDropDownResource = resource;
mFrom = from;
mTo = to;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mArrayList = arrayList;
}
Изменил метод getView() :
public View getView(int position, View convertView, ViewGroup parent) {
return createViewFromResource(mInflater, position, convertView, parent,
mArrayList.get(position) == 0 ? R.layout.left_item : R.layout.right_item);
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости