-1

我的列表视图包含一个图像和一些文本视图;有两个包含价格和特价的textiview,如果特价为0,则只设置价格textview和特价让它为空,但特价>0比设置的价格值以及特价,第一次一切顺利但是当我滚动列表视图时,空白文本视图设置为虚拟值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 重用用作列表项/网格元素的视图。每次android在滚动视图时尝试绘制下一个元素时都会调用getView()。没有必要阻止它!

编辑 - Atrix1987

来自开发者文档

Adapter 对象充当 AdapterView 和该视图的基础数据之间的桥梁。适配器提供对数据项的访问。Adapter 还负责为数据集中的每一项创建一个 View。

假设您有 10 个要使用 GridView/ListView 显示的元素,并且最大可见项是 5 个,那么当您滚动时,可以重复使用相同的 5 个视图来显示其余 5 个元素。这是预期的行为,也是做事的正确方法[将视图数量保持在最低限度]。

您无法控制getView方法,框架会为您完成。

于 2013-03-25T10:43:12.777 回答
0

GridView部件扩展AdapterView. 它使用适配器来允许重用视图并提高性能。没有办法避免调用- 这对整个想法getView()至关重要。AdapterView如果你想要一个静态布局,也许你应该使用别的东西。

于 2013-03-25T10:51:01.573 回答