2011-12-03 20 views
0

現在のAndroid SDK、r15を使用しています。アンドロイド仮想デバイス - 表示が奇妙な背景色になりました

私のプロジェクトでは、BaseAdapterに基づいてカスタマイズされたアダプタでListViewを使用しています。 BaseAdapter :: getView-methodには、xml ressourcesから膨らみ、カスタマイズされ、テキストで満たされたビューがあります。いくつかの条件に応じて背景色も変更されます。これは素晴らしいですが、:

Android 3.0以上のAndroid仮想デバイス(AVD)では、Androidが既存のビューをリサイクルしようとするとき、背景色がxml ressourceで指定されていても変更されます。

これはアンドロイドエミュレータの問題ですか、これが実際のデバイスでも発生することはありますか? 同じアプリケーションで、実際のデバイスでこの問題を見たことはありません。 私はlogin-layout(ほぼ白色、入力フィールドとボタン付き)、連絡先listViewと会話listViewを含む "タブレット" - レイアウトを持つプロジェクトを持っています。ログイン後、私は連絡先を選択することができます。オンラインの連絡先には緑の背景があり、オフラインの連絡先にはホワイトの連絡先があります。連絡先を選択すると、連絡先の背景が赤色に変わります。会話は会話listViewに読み込まれます。今すぐログオフし、以前の連絡先の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; 
    } 
+0

'getView'関数のコードを記述できますか? – havexz

+0

私は 'getView'のコードを含め、今質問を編集しました。 – pmedia

答えて

1

このスニペットを試してみてください:

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

これで問題が解決しない場合であっても、これがありますあなたのListViewのパフォーマンスを大幅に向上させます。 Androidがビューを再利用しようとすると、convertViewは初めてnullになり、再作成されて使用される古い作成ビューが含まれます。

+0

この改善のおかげで:) – pmedia

+0

問題は修正されますか? – havexz

+0

背景色が壊れているビューは、setContentView(R.layout。[...])を介して別の場所にロードされています。 – pmedia

関連する問題