listview 复用数据错误以及listview item中的控件之间修改状态



import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.HashMap;

/**
 *
 */
public class ShopGoodsActivity extends Activity implements View.OnClickListener {


    /**
     * 商铺名称商铺名称(观音山店)
     */
    private TextView mShopName;
    private ImageView mShopImg;
    private ImageView mShopback;
    private RelativeLayout mRelativeLayout;
    /**
     * 商铺名称商铺名称(观音山店)
     */
    private TextView mShopNames;
    private ImageView mShopStarOne;
    private ImageView mShopStarTwo;
    private ImageView mShopStarThree;
    private ImageView mShopStarFour;
    private ImageView mShopDetailsStarFive;
    private RelativeLayout mRelativeLayout2;
    /**
     * 人气指数
     */
    private TextView mTextView18;
    /**
     * 家居用品/家具
     */
    private TextView mShopTpye;
    /**
     * 商品分类
     */
    private RadioButton mShopGoods;
    /**
     * 商家推荐
     */
    private RadioButton mShopBusiness;
    /**
     * 价格
     */
    private RadioButton mShopPrice;
    private RadioGroup mBottomGroup;
    private ListView mShopGoodsList;
    private ShopGoodsAdaapter mShopGoodsAdaapter;


    private final int MSG_UPDATE_GOODADD  = 0;
    private UpHandler mHandler;

    private int checkposition = 0 ;



    private class UpHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case MSG_UPDATE_GOODADD:


//                    View itemView=mShopGoodsList.getChildAt(checkposition);
//                    ImageView mGoodCut =(ImageView) itemView.findViewById(R.id.goods_cut);
//                    TextView mGoodNum =(TextView) itemView.findViewById(R.id.goods_num);
//                    mGoodCut.setVisibility(View.VISIBLE);
//                    mGoodNum.setVisibility(View.VISIBLE);

                    mShopGoodsAdaapter.setSelected(checkposition,true);

//                    mLvAdapter.setSelected(position, holder.checked.isChecked());


                    mShopGoodsAdaapter.notifyDataSetChanged();
                    break;
            }
        }
    }








    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shop_goods);

        initView();
        initVariable();
        initListener();

    }

    private void initView() {
        mShopback = (ImageView) findViewById(R.id.shop_goods_back);
        mShopback.setOnClickListener(this);
        mShopName = (TextView) findViewById(R.id.shop_name);
        mShopName.setOnClickListener(this);
        mShopImg = (ImageView) findViewById(R.id.shop_img);
        mShopImg.setOnClickListener(this);

        mShopNames = (TextView) findViewById(R.id.shop_names);
        mShopNames.setOnClickListener(this);
        mShopStarOne = (ImageView) findViewById(R.id.shop_star_one);
        mShopStarOne.setOnClickListener(this);
        mShopStarTwo = (ImageView) findViewById(R.id.shop_star_two);
        mShopStarTwo.setOnClickListener(this);
        mShopStarThree = (ImageView) findViewById(R.id.shop_star_three);
        mShopStarThree.setOnClickListener(this);
        mShopStarFour = (ImageView) findViewById(R.id.shop_star_four);
        mShopStarFour.setOnClickListener(this);
        mShopDetailsStarFive = (ImageView) findViewById(R.id.shop_details_star_five);
        mShopDetailsStarFive.setOnClickListener(this);


        mShopTpye = (TextView) findViewById(R.id.shop_type);
        mShopTpye.setOnClickListener(this);
        mShopGoods = (RadioButton) findViewById(R.id.shop_goods);
        mShopGoods.setOnClickListener(this);
        mShopBusiness = (RadioButton) findViewById(R.id.shop_business);
        mShopBusiness.setOnClickListener(this);
        mShopPrice = (RadioButton) findViewById(R.id.shop_price);
        mShopPrice.setOnClickListener(this);
        mBottomGroup = (RadioGroup) findViewById(R.id.bottom_group);
        mBottomGroup.setOnClickListener(this);
        mShopGoodsList = (ListView) findViewById(R.id.shop_goods_list);

    }









    private void initVariable(){
        mHandler = new UpHandler();
        mShopGoodsAdaapter = new ShopGoodsAdaapter();
        mShopGoodsList.setAdapter(mShopGoodsAdaapter);
        mShopGoodsAdaapter.initSelect();
    }



    @Override
    public void onClick(View view) {
        switch (view.getId())
        {
            case R.id.shop_goods_back:
                finish();
                break;
        }

    }

    private void initListener(){

    }








    private HashMap<Integer, Boolean> mCheckedMap;
    private int mCheckedNum = 0;
    private class ShopGoodsAdaapter extends BaseAdapter {
        ViewHolder viewHolder;

        public ShopGoodsAdaapter() {
            mCheckedMap = new HashMap<>();
        }


        private void initSelect()
        {
            mCheckedMap.clear();
            mCheckedNum = 0;
            for (int i = 0; i < getCount(); i++)
            {
                mCheckedMap.put(i, false);
            }
        }

        public Integer getSelectedNum()
        {
            return mCheckedNum;
        }

        public void setSelected(final int position, final boolean isChecked)
        {
            mCheckedMap.remove(position);
            mCheckedMap.put(position, isChecked);
            if (isChecked)
            {
                mCheckedNum++;
            } else if (mCheckedNum > 0)
            {
                mCheckedNum--;
            }
        }




        public void clear()
        {
//            mDataList.clear();
            mCheckedMap.clear();
            mCheckedNum = 0;
        }












        @Override
        public int getCount() {
            return 15;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int position, View view, ViewGroup viewGroup) {
                final int num = position;


            if (view == null) {
                viewHolder = new ViewHolder();
                view = getLayoutInflater().inflate(R.layout.shop_goods_list, null);
                viewHolder.mGoodImg =(ImageView) view.findViewById(R.id.goods_img);
                viewHolder.mGoodName =(TextView) view.findViewById(R.id.goods_name);
                viewHolder.mGoodSale =(TextView) view.findViewById(R.id.goods_sale);
                viewHolder.mGoodPrice =(TextView) view.findViewById(R.id.goods_price);
                viewHolder.mGoodAdd =(ImageView) view.findViewById(R.id.goods_add);
//                viewHolder.mGoodAdd.setOnClickListener(new goodsAdd(position));

                viewHolder.mGoodCut =(ImageView) view.findViewById(R.id.goods_cut);
                viewHolder.mGoodNum =(TextView) view.findViewById(R.id.goods_num);
                view.setTag(viewHolder);

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


            viewHolder.mGoodAdd.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.e("log " , "goodsAdd onClick");


                    checkposition = num;
                    mHandler.sendEmptyMessage(MSG_UPDATE_GOODADD);


                }
            });

            if (mCheckedMap.get(num) == false){
                viewHolder.mGoodCut.setVisibility(View.INVISIBLE);
                viewHolder.mGoodNum.setVisibility(View.INVISIBLE);
            }else{
                viewHolder.mGoodCut.setVisibility(View.VISIBLE);
                viewHolder.mGoodNum.setVisibility(View.VISIBLE);
            }



//            holder.checked.setChecked(mCheckedMap.get(position));

            return view;
        }




        class goodsAdd implements View.OnClickListener{
            public int position;
            public goodsAdd(int p) {
                position = p;

            }

            @Override
            public void onClick(View view) {
                Log.e("log " , "goodsAdd onClick");
                Message msg = mHandler.obtainMessage(MSG_UPDATE_GOODADD);
                viewHolder.mGoodNum.setVisibility(View.VISIBLE);
                viewHolder.mGoodNum.setText("    "+1);
                viewHolder.mGoodCut.setVisibility(View.VISIBLE);
            }
        }



        @Override
        public void notifyDataSetChanged() {
            super.notifyDataSetChanged();
        }



    }

    private class ViewHolder {
        private ImageView mGoodImg;
        private ImageView mGoodAdd;
        private ImageView mGoodCut;
        private TextView mGoodName;
        private TextView mGoodSale;
        private TextView mGoodPrice;
        private TextView mGoodNum;
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值