Я использую текущий Android SDK, r15.
В моем проекте я использую ListViews с настроенными адаптерами, основанными на BaseAdapter.В BaseAdapter :: getView-method есть представление, накачанное из ресурсов XML, настроенное и заполненное текстом;также цвет фона меняется в зависимости от нескольких условий.Это прекрасно работает, но:
На виртуальных устройствах Android (AVD) с Android 3.0 и выше, у меня есть проблема, что в какой-то момент, когда Android пытается перезапустить существующие представления, цвет фонане изменяется, даже если это указано в ресурсе xml.
Должен ли я считать, что это проблема эмулятора Android, или же это может происходить на реальных устройствах?Я никогда не видел эту проблему на реальном устройстве с тем же приложением.
неабстрагированный пример: у меня есть проект с макетом входа в систему (почти белый, с полями ввода и кнопкой),«планшетный» макет, содержащий вид списка контактов и вид списка беседы;после входа я могу выбрать контакт.У онлайн-контактов есть зеленый фон, у офлайн-контактов - белый.После выбора контакта фон контакта становится красным.Разговор загружается в список беседы.Теперь я выхожу из системы, и теперь мой прежний белый логин может быть зеленым или красным, как в контакте ListView ранее.Также может случиться так, что даже мои записи listView-Entries наследуют цвет элемента списка listView, игнорируя цвет фона, указанный в xml.Это кажется совершенно случайным.
Сокращенный код getView: (только исключил код для установки 'profileImage')
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = inflater.inflate(R.layout.contacts_listelement, parent, false);
int userId = contactList.get(position);
BackendStamp user = users.get(userId);
ImageView profileImage = (ImageView)view.findViewById(R.id.profilePicture);
TextView username = (TextView)view.findViewById(R.id.username);
TextView unreadMails = (TextView)view.findViewById(R.id.unreadMails);
ImageView userStatus = (ImageView)view.findViewById(R.id.userStatus);
if (user != null) {
if (user.getUnreadMails() == 0) {
unreadMails.setBackgroundResource(R.drawable.bgmessagesnull);
unreadMails.setTextColor(0xff000000);
}
else {
unreadMails.setBackgroundResource(R.drawable.bgmessagesnotnull);
unreadMails.setTextColor(0xffffffff);
}
if (user.getStatus() == 0) {
view.setBackgroundColor(0xFFFFFFFF);
}
else {
view.setBackgroundColor(0xFFEFFFD4);
}
// [...]
username.setText(user.getNickname());
unreadMails.setText("" + user.getUnreadMails());
// [...]
}
return view;
}