有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当我滚动listview时,textview将获得其默认值0

我有两个按钮增加和减少和一个文本视图。当我点击增加按钮时,文本视图中的值会增加,反之亦然,但当我滚动列表视图时,其默认值为0。我如何解决这个问题

public View getView(final int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.cart_item, parent, false);

            viewHolder = new ViewHolder();
            viewHolder.mImgItem = (ImageView) convertView.findViewById(R.id.cart_image);
            viewHolder.mTvItemName = (TextView) convertView.findViewById(R.id.tv_item_name);
            viewHolder.mTvItemPrice = (TextView) convertView.findViewById(R.id.tv_item_price);
            viewHolder.mTvNumber = (TextView) convertView.findViewById(R.id.tv_number);
            viewHolder.mBtnAdd = (Button) convertView.findViewById(R.id.btn_add);
            viewHolder.mBtnMinus = (Button) convertView.findViewById(R.id.btn_sub);
            viewHolder.mImgDelete = (ImageView) convertView.findViewById(R.id.img_del);
            viewHolder.mUniqueKey = String.valueOf(position);

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

        viewHolder.mBtnAdd.setTag(viewHolder);
        viewHolder.mBtnMinus.setTag(viewHolder);

        viewHolder.mTvNumber.setText("0");
        viewHolder.mBtnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ViewHolder tagHolder = (ViewHolder) v.getTag();

                int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString().trim());
                mValue++;
                tagHolder.mTvNumber.setText("" + mValue);    
        });

        viewHolder.mBtnMinus.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ViewHolder tagHolder = (ViewHolder) v.getTag();
                    int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString());
                    if (mValue > 0) {
                        mValue--;
                        tagHolder.mTvNumber.setText("" + mValue);
                    }

        });

        convertView.setTag(viewHolder);

        PojoCart pojoCart = (PojoCart) getItem(position);
        viewHolder.mTvItemName.setText(pojoCart.getmItemName());
        viewHolder.mTvItemPrice.setText(pojoCart.getmItemPrice());

        return convertView;
    }

共 (4) 个答案

  1. # 1 楼答案

    你必须保存textview的价值。 当listview在scroll上重新创建视图时,它采用默认设置 只需上模型课,按位置保存值即可

  2. # 2 楼答案

    数据更改时,使用adapter.notifyDataSetChanged()更新listview中的值

  3. # 3 楼答案

    您需要在每个列表项中存储编号,例如,使用此功能更改列表项编号的值:

    List<Integer> mList = new ArrayList<>(LIST_SIZE);
    
    int changeNumber(int position, int value){
        mList.get(position) += value;
        return mList.get(position);
    }
    

    你可以像这样使用这个功能:

    viewHolder.mBtnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ViewHolder tagHolder = (ViewHolder) v.getTag();
    
                int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString().trim());
                tagHolder.mTvNumber.setText("" + changeNumber(position,1);    
        });
    
        viewHolder.mBtnMinus.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ViewHolder tagHolder = (ViewHolder) v.getTag();
                    int mValue = Integer.parseInt(tagHolder.mTvNumber.getText().toString());
                    if (mValue > 0) {
                        tagHolder.mTvNumber.setText("" + changeNumber(position,-1);
                    }
    
        });
    
  4. # 4 楼答案

    将值保存到PojoCart类,并在每次获取itemName和itemPrice时从中检索值。因此,在PojoCart类和适配器的getView方法中创建一个整数:

    PojoCart pojoCart = (PojoCart) getItem(position);
    viewHolder.mBtnAdd.setTag(pojoCart);
    viewHolder.mBtnMinus.setTag(pojoCart);
    if(pojoCart.getQuantity() > 0)
    {
       viewHolder.mTvNumber.setText(""+pojoCart.getQuantity());
    }
    else
    {
       viewHolder.mTvNumber.setText(""+0);
    }
    viewHolder.mBtnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
              PojoCart pojoCart = (PojoCart) v.getTag();
                int mValue = pojoCart.getQuantity();
                mValue++;
                tagHolder.mTvNumber.setText("" + mValue);
                pojoCart.setQuantity(mValue)
                notifyDataSetChanged();
    };