我使用的是當前的Android SDK r15。android虛擬設備 - 視圖有奇怪的背景顏色
在我的項目中,我使用基於BaseAdapter的自定義適配器的ListViews。在BaseAdapter :: getView方法中,存在一個視圖,從xml資源中誇大並定製並填充文本;背景顏色也會根據幾種情況而改變。這很好,但:
在Android 3.0及更高版本的Android虛擬設備(AVD)上,我遇到了問題,在某些時候,當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;
}
你可以把'getView'函數的代碼? – havexz
我編輯了這個問題,現在包括'getView'的代碼。 – pmedia