Android SimpleAdapter изменение ресурса

242
10 апреля 2017, 05:04

Есть 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); но я так понял это тут не поможет.

Answer 1

Для решения этой проблемы, пришлось полностью скопировать код класса 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);
}
READ ALSO
Not recognized by any processor

Not recognized by any processor

Пытаюсь я сбилдить проект, а тут такая ошибка!

372
Получение данных из Excel (Java)

Получение данных из Excel (Java)

Читал я и про Apache POI и про jexcelapi,и про jdbc способ, про всё это читал, но ни где,повторяюсь нигде, не нашел годного гайда или туториала,или примеров...

419
Как захардкодить строку в Jsoup? (проблемы с символами)

Как захардкодить строку в Jsoup? (проблемы с символами)

Проблема в том, что в строке содержится знак процента, из чего появляются лишние символы: 25Как их убрать, ума не приложу

272
Как узнать ориентацию экрана на Android-е

Как узнать ориентацию экрана на Android-е

Как сделать чтобы программа заработала и вывела информацию о том в кокой ориентации у тебя находится экран смартфона , если уже создал функцию...

278