listview 复用数据错误以及listview item中的控件之间修改状态
2017-04-11 14:08
459 查看
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; } }
相关文章推荐
- ListView的item中EditText编辑(或者其他控件)修改本行数据
- android app -- 关于listview的几种用法(复用,不复用,半复用)解决item状态改变的问题
- Android ListView中子控件的状态保存以及点击子控件改变子控件状态
- Android开发修改DialogFragment样式以及与activity之间的数据传递
- listview selector 选中时改变item 子控件 图片状态
- 简单的实现listView中item多个控件以及点击事件
- 打造Android集合控件数据绑定(支持添加监听,支持AbsListView与RecycleView,支持异步加载等)(二)ORM注解以及解析
- ListView item错位 由于Item复用时高度不一致导致ListView 显示错误
- Listview点击事件失效问题解决以及每个Item 子控件获取focus
- WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
- MFC各个控件之间运用SendMessage()传送CString和char[]字符串,以及int类型数据
- 设置listview展示数据每个item之间的间隔
- ListView应用------ListView控件显示List集合中的数据,并对Item响应选择事件(法二)
- 修改工具栏图标&得到CTreeCtrl控件item的状态为始终为未选中(unchecked)
- 【Android】使用自定义Adapter优化ListView、修改数据及控件内部布局
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听
- 简单的实现listView中item多个控件以及点击事件
- 去掉listview中item之间的横线以及设置listview的背景色
- android 为 ListView Item中的组件添加事件 以及更新数据
- android app -- 关于listview的不复用,解决item状态改变的问题