1

私は個人的な予算についてAndroidアプリケーションを開発しています。トランザクションを一覧表示するときは、を使用してListViewいます。ListViewに、すべて異なるバックグラウンドリソースを持つ収入、費用、および転送トランザクションを示します。しかし、リストビューまで下にスクロールして再び表示すると、背景画像が変わります。誰かがそのように起こった理由を教えてもらえますか?

これは私のコード例です。

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.transactionline, null);

    transaction.setType(Integer.parseInt(item.get("Type")));

    if(transaction.getType()==1){
        anaalan.setBackgroundResource(R.anim.greenbutton);
    }else if(transaction.getType()==3)
    {
        anaalan.setBackgroundResource(R.anim.buttonstyle);
    }

    return vi;
}
4

2 に答える 2

0

これを試して:

if (position % 2 == 1)
   { 
    convertView.setBackgroundColor(Color.WHITE);    
   }
 else
   { 
    convertView.setBackgroundColor(Color.TRANSPARENT); 
   }
convertView.setTag(holder);
于 2013-03-13T13:36:43.753 に答える
0

これがあなたの問題に対する答えです。

ご存知のとおり、ListViewはconverViewを再利用し、再利用されたビューに新しい値を表示します。したがって、ListViewを上下にスクロールすると、画面から消えたlistItemが、画面に表示されたばかりの新しいlistItemで再利用されます。

したがって、listItemの一部に緑色のような背景色を追加すると、画面から消えて新しいlistItemに再利用されると、すでに背景色が緑色になっているため、新しいアイテムにも緑色の背景が表示され、スクロールする速度が速くなります。上下にリストすると、最終的にすべてのアイテムが緑色になります。

getView()がアイテムの描画を開始すると、最初の3つのリストアイテムのサイズが計算され、次にリストビューの高さで残りのアイテムのサイズが計算されるため、もう1つは常にlistViewにfill_Parentなどの固定の高さを指定します。

したがって、このような状況で私が行うことは、デフォルトですべてのビューに透明色を与え、その後、ロジックを適用して他の色に変更することです。

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        Holder holder;
        if (convertView == null){
            holder = new Holder();
            convertView =   View.inflate(context, R.layout.item, null);
            holder.txtID = (TextView) convertView.findViewById(R.id.text);
            holder.txtName  =   (TextView) convertView.findViewById(R.id.text2);
            convertView.setTag(holder);
        }else{
            holder = (Holder) convertView.getTag();
        }

        convertView.setBackgroundColor(Color.TRANSPARENT);

        if (Integer.parseInt( setter.get(position).getId() ) % 3 == 0  ){
            convertView.setBackgroundColor(Color.GREEN);
        }

        if (Integer.parseInt( setter.get(position).getId() ) % 2 == 0 ){
            convertView.setBackgroundColor(Color.YELLOW);
        }

        holder.txtID.setText(setter.get(position).getId());
        holder.txtName.setText(setter.get(position).getName());


        return convertView;
    }
于 2013-03-14T06:07:12.547 に答える