Столкнулся с проблемой, что не могу понять принцип работы метода getView от BaseAdapter. История такова, что есть ListView, в который идут данные из Firebase. В зависимости от того, какие данные должны быть в нем, выбирается различный Layout. Вот как выглядит сейчас этот метод.
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
if (mMessages.get(i).getUserId().equals(GlobalsMethods.currUserId))
view = mInflater.inflate(mAltLayout, viewGroup, false);
else
view = mInflater.inflate(mLayout, viewGroup, false);
}
T model = mModels.get(i);
populateView(view, model);
return view;
}
Список mMessages обновляется в методах addChildEventListener. Если используется только один Layout, то никаких проблем нет. В противном случае это все работает некорректно. Некоторые элемента списка работают нормально, а некоторым присваивается неверный Layout. И при этом они еще могут меняться прямо во время работы. Если пробовать выводить данные в logcat, то там все, вроде, в порядке: нужным элементам присваиваются нужные значения. Например:
Log.e("FirebaseListAdapter", String.valueOf(i));
Log.e("FirebaseListAdapter", GlobalsMethods.currUserId);
Log.e("FirebaseListAdapter", mMessages.get(i).getUserId() + " - " + mMessages.get(i).getMessage());
Выводит:
E/FirebaseListAdapter: 0
E/FirebaseListAdapter: test
E/FirebaseListAdapter: apk001 - rg
E/FirebaseListAdapter: mLayout
Данные верные, но, в итоге, у этого элемента списка оказывается mAltLayout.
Честно говоря, не понимаю, почему так происходит. Заранее благодарю за ответ.