-1

私のリストビューには1つの画像といくつかのテキストビューが含まれています。価格と特別価格を含む 2 つの textiview があります。特別価格が 0 の場合、価格のみのテキストビューと特別価格を null にしますが、特別価格が設定価格値と特別価格よりも > 0 であり、最初はすべて順調に進んでいますしかし、リストビューをスクロールすると、dumyy値が設定された空白のテキストビューが表示されますenter code here

これが私のgetViewメソッドコードです。

@Override
public     View     getView(final int position, View convertView, ViewGroup parent){
//public View getView(int position, View convertView, ViewGroup parent) {
    /*View vi = convertView;
    if (convertView == null)
    {
        vi = inflater.inflate(R.layout.list_row, null);
    }
    */
    int pos=position;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list_row, null);
        viewHolder=new ViewHolder();
        viewHolder.txt_id = (TextView) convertView.findViewById(R.id.id); // title
        viewHolder.txt_product_name = (TextView) convertView.findViewById(R.id.title); // title
        viewHolder.artist = (TextView) convertView.findViewById(R.id.artist); // artist
                                                                    // name
        viewHolder.txt_mspecialprice_withouttax = (TextView) convertView.findViewById(R.id.duration); // duration
        viewHolder.stock = (TextView) convertView.findViewById(R.id.stck);
        viewHolder.txt_mprice_withouttax = (TextView) convertView.findViewById(R.id.txtmpricewithouttax);

        viewHolder.thumb_image = (ImageView) convertView.findViewById(R.id.list_image); // thumb
                                                                                // image


        convertView.setTag(viewHolder);

    }
    else{
        viewHolder = (ViewHolder) convertView.getTag();
    }


    HashMap<String, String> song = new HashMap<String, String>();
    song = data.get(position);

    // Setting all values in listview
    String mspecialprice_str=song.get(CustomizedListView.KEY_PRODUCT_MSPECIAL_WITHOUT_TAX);
    //String substr_mspecialprice_str=mspecialprice_str.substring(1,mspecialprice_str.indexOf("."));
    //String substr_mspecialprice_str_replaced=substr_mspecialprice_str.replace(",", "");

    String msaleprice_str=song.get(CustomizedListView.KEY_PRODUCT_MPRICE_WITHOUT_TAX);
    //String substr_msaleprice_str=msaleprice_str.substring(0,msaleprice_str.indexOf("."));
    //String substr_msaleprice_str_replaced=substr_msaleprice_str.replace(",", "");

    viewHolder.txt_id.setText(song.get(CustomizedListView.KEY_PRODUCT_ID));
    viewHolder.txt_product_name.setText(song.get(CustomizedListView.KEY_PRODUCT_NAME));
    viewHolder.artist.setText(song.get(CustomizedListView.KEY_PRODUCT_DESCRIPTION));
    viewHolder.stock.setText(song.get(CustomizedListView.KEY_STOCK));
    if(mspecialprice_str.equals("0"))
    {
        //txt_mspecialprice_withouttax.setText(song.get(CustomizedListView.KEY_PRODUCT_MSPECIAL_WITHOUT_TAX));
        viewHolder.txt_mprice_withouttax.setText("$"+(song.get(CustomizedListView.KEY_PRODUCT_MPRICE_WITHOUT_TAX)));

        viewHolder.txt_mprice_withouttax.setTextColor(Color.parseColor("#64aef9"));

    }
    //if(!(mspecialprice_str.equals("0")))
    //{
else
{
    viewHolder.txt_mspecialprice_withouttax.setText("$"+(song.get(CustomizedListView.KEY_PRODUCT_MSPECIAL_WITHOUT_TAX)));
    viewHolder.txt_mprice_withouttax.setText("$"+(song.get(CustomizedListView.KEY_PRODUCT_MPRICE_WITHOUT_TAX)));
    viewHolder.txt_mprice_withouttax.setPaintFlags(viewHolder.txt_mprice_withouttax.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    viewHolder.txt_mprice_withouttax.setTextColor(Color.parseColor("#F01616"));
}

    imageLoader.DisplayImage(
            song.get(CustomizedListView.KEY_PRODUCT_IMAGEURL), viewHolder.thumb_image);

    return convertView;
}
}

class ViewHolder {
TextView txt_id ; // title
TextView txt_product_name; // title
TextView artist ; // artist
                                                            // name
TextView txt_mspecialprice_withouttax; // duration
TextView stock ;
TextView txt_mprice_withouttax;

ImageView thumb_image ; // thumb


}
4

2 に答える 2

1

ListView、GridView は、リスト アイテム/グリッド要素として使用されるビューを再利用します。getView() は、Android がビューのスクロール中に次の要素を描画しようとするたびに呼び出されます。それを防ぐ必要はありません!

編集 - Atrix1987

開発者ドキュメントから

Adapter オブジェクトは、AdapterView とそのビューの基になるデータとの間のブリッジとして機能します。Adapter は、データ項目へのアクセスを提供します。アダプターは、データ セット内の各アイテムのビューを作成する役割も果たします。

GridView/ListView を使用して表示する 10 個の要素があり、最大表示項目が 5 であるとします。同じ 5 つのビューを再利用して、スクロール時に残りの 5 つの要素を表示できます。これは意図された動作であり、物事を行うための正しい方法です [ビューの数を最小限に抑えます]。

getViewメソッドを制御することはできません。フレームワークがそれを行います。

于 2013-03-25T10:43:12.777 に答える
0

GridViewウィジェットが拡張されAdapterViewます。アダプターを使用して、ビューの再利用を可能にし、パフォーマンスを向上させます。電話を避ける方法はありません- それはアイデアgetView()全体に不可欠です。AdapterView静的なレイアウトが必要な場合は、おそらく別のものを使用する必要があります。

于 2013-03-25T10:51:01.573 に答える