4

私の Android アプリケーションには、5 つの要素を持つ ListView があります。listView の一部の要素の背景を変更するために、カスタム アダプターを作成しました。たとえば、リスト ビューの 2 番目の項目はまだ準備ができていないので、やりたいので、まだ完了していないsetBackground(Color.Gray)ように見せることができます。それを行うために、次のようにカスタム アダプターの ArrayAdapter から getView() メソッドをオーバーライドしました。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent); 
    if(!itensAvailable[position]) v.setBackgroundColor(Color.Gray);
    return v;
}

奇妙なことに、ブール値を使用してitensAvailable[position]!itensAvailable[position]、リストの最初の要素を使用しても、常に背景が変更されます! リストの他のすべての要素は、最初の要素を除いて、期待どおりに動作しています。それよりも奇妙なこと、私がそうするなら if(position == 2) v.setBackgroundColor(Color.Gray);

位置 2 のアイテムから背景を変更し、最初のアイテムも変更します! 私が行った場合

if(position == 2) {
v.setBackgroundColor(Color.Gray);
System.out.println(v.getText());
}

さらに奇妙な!最初の項目のテキストではなく、位置 2 のテキストのみが印刷されます。

何が起こっている?アンドロイドのバグ?ちなみに、XOOM 3.2 Honeycomb デバイスでテストしています。

そして明らかに、このifコードにコメントすると、最初のアイテムの背景は変更されていません。

4

3 に答える 3

2

とても不思議です!あなたが書くとどうなりますか:

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent); 
        if(!itensAvailable[position]) v.setBackgroundColor(Color.Gray);
        else v.setBackgroundColor(Color.Transparent);
        return v;
    }
于 2011-11-25T13:50:38.493 に答える
0

私は奇妙な行動を説明することはできません。次のコードを試して、問題が解決するかどうかを確認できますか?

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
     convertView = to the view to be displayed;
  }
  if(!itensAvailable[position]) convertView.setBackgroundColor(Color.Gray);
  return convertView;
 }
于 2011-11-25T14:00:51.770 に答える
0

私はまったく同じ問題を抱えています。本当に奇妙です!

私にとってうまくいったのは、行を削除することです

View v = super.getView(position, convertView, parent); 

代わりに使用します-

LayoutInflater inflater = LayoutInflater.from(getContext());
View v = inflater.inflate(R.layout.__my__layout__, parent, false);
.... more view manipulations ....

それが役に立てば幸い!

于 2015-10-17T19:17:07.977 に答える