2011-12-03 6 views
0

현재 Android SDK, r15를 사용 중입니다.android 가상 장치 -보기에 이상한 배경색이 있음

내 프로젝트에서는 BaseAdapter를 기반으로 맞춤 어댑터가있는 ListView를 사용하고 있습니다. BaseAdapter :: getView-method에는 xml ressources에서 확장되고 텍스트가 사용자 정의되고 채워진 뷰가 있습니다. 여러 가지 조건에 따라 배경색도 변경됩니다. 이것은 대단합니다 :

Android 3.0 이상을 사용하는 Android 가상 장치 (AVD)에서 필자는 Android가 기존보기를 재활용하려고 시도 할 때 어떤 시점에서 배경색이 문제가되지 않습니다. xml ressource에 지정되어 있어도 변경됩니다.

나는 이것이 안드로이드 에뮬레이터의 문제라고 생각 하나, 아니면 실제 기기에서도 발생하는 것일까? 동일한 응용 프로그램을 사용하여 실제 장치에서이 문제를 본 적이 없습니다.

추상화되지 않은 예 : 로그인 레이아웃 (거의 흰색, 입력 필드 및 버튼 포함)이있는 프로젝트, 연락처 listView 및 대화 listView가 포함 된 "태블릿"레이아웃이 있습니다. 로그인 한 후 연락처를 선택할 수 있습니다. 온라인 연락처에는 녹색 배경이 있고 오프라인 연락처에는 흰색 연락처가 있습니다. 연락처를 선택하면 연락처의 배경이 빨간색으로 바뀝니다. 대화는 대화 listView에로드됩니다. 이제 로그 오프했는데, 지금은 ListView 연락처와 마찬가지로 이전의 흰색 로그인이 초록색이나 빨간색 일 수 있습니다. 또한, 심지어 내 대화 listView-Entries는 xml에 지정된 배경색을 무시하고 연락처 listView 요소의 색을 상속받을 수 있습니다. 그건 꽤 무작위로 보인다.

의 getView의

단축 코드 :이 문제가 해결되지 않는 경우에도

는, 이것이
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 
    if(convertView == null) { 
     view = inflater.inflate(R.layout.contacts_listelement, parent, false); 
    } 
    else { 
     view = convertView; 
    } 

: 이

@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; 
    } 
+0

'getView' 함수의 코드를 넣을 수 있습니까? – havexz

+0

'getView' 코드를 포함하여 질문을 편집했습니다. – pmedia

답변

1

이 조각을 시도 (단지 'profileImage'을 설정하는 코드를 제외) ListView에 큰 성능 향상. Android가보기를 재사용하려고 시도 할 때 convertView은 처음으로 null이고 그 다음에는 다시 순환되어 사용되어야하는 이전에 생성 된보기가 포함됩니다.

+0

개선해 주셔서 감사합니다 :) – pmedia

+0

문제가 해결 되었습니까? – havexz

+0

아니요. 배경색이 손상된 뷰는 setContentView (R.layout. [...])를 통해 다른 위치에로드됩니다. – pmedia

관련 문제