0

セクションとエントリ アイテムを含む listView があります。例えば..

  Supplies  (Section Item)
     Pens     (Entry Item)
     Pencils
  Groceries
     Eggs
     Lettuce
  Etc....

私のリスト アダプターでは、セクション アイテムの背景をさまざまな色に設定しています。

  view.setBackgroundColor(Color.YELLOW);

スクロールを開始するまで、これはすべて正常に機能し、その後、セクション項目が黒くなります (エントリ項目はこれを行いません)。これを防ぐ方法を知っている人はいますか?

getView() メソッドのコード

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    final ItemEchelon i = items.get(position);
    if (i != null) {
        if(i.isSection()){
            SectionItemEchelon si = (SectionItem)i;
            v = vi.inflate(R.layout.item_section, null);

            v.setOnClickListener(null);
            v.setOnLongClickListener(null);
            v.setLongClickable(false);

            final TextView sectionView = (TextView) v.findViewById(R.id.tv_Name);
            sectionView.setText(si.getTitle());
            if(count == 0)
            {
                v.setBackgroundColor(Color.YELLOW);
            }
            if(count == 1)
            {
                v.setBackgroundColor(Color.GREEN);
            }
            if(count == 2)
            {
                v.setBackgroundColor(Color.RED);
            }
            if(count == 3)
            {
                v.setBackgroundColor(Color.GRAY);
            }
            count ++;
        }else{
            EntryItemEchelon ei = (EntryItemEchelon)i;
            v = vi.inflate(R.layout.item_entry, null);
            final TextView title = (TextView)v.findViewById(R.id.tv_entryTitle);
            final TextView score = (TextView)v.findViewById(R.id.tv_entryScore);

            if (title != null) 
                title.setText(ei.Name);
            if(score != null)
                score.setText(ei.Score);
        }
    }
    return v;
}

背景色を変更する if ステートメントを削除して問題を修正しました。SectionItem を構築するときに色を初期化する必要があるようにしました。

4

3 に答える 3

1

これandroid:cacheColorHint="@android:color/transparent"をあなたのList View

于 2012-07-11T18:14:21.563 に答える
0

可変の「カウント」はあなたの問題ですか?インクリメントしているように見えます。スクロールするときは、convertViewを無視しているため、常に新しいビューを作成します。count> = 4の場合、バックグラウンドは取得されません...

効率を高め、この問題の解決に役立てるために、convertViewを使用する必要があります。

if (convertView != null)
 v = convertView;
else
{
 v = vi.inflate();
 ...
}

コードを正しく読んでいる場合のもう1つの大きな危険は、getViewが特定の順序で呼び出されることに依存していることです(セクション2の前のセクション1)。セクション。

于 2012-07-11T19:44:56.037 に答える
0

このプロパティをリストビューに追加します

android:cacheColorHint="#00000000"

すべてが完璧になるよりも:)。

ありがとう

于 2012-07-11T18:17:14.140 に答える