日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

關(guān)于ListView中加入并選取checkbox錯(cuò)位的問(wèn)題

系統(tǒng) 1836 0
在ListView中的列表項(xiàng)中定義checkbox是一個(gè)常見(jiàn)手法,不過(guò)如果在listview使用了ViewHolder緩存的話就會(huì)遇到一個(gè)很惡心的問(wèn)題,就是列表項(xiàng)錯(cuò)位的問(wèn)題,為此我想到了一個(gè)自認(rèn)為還算簡(jiǎn)單的解決方法,就是在自定義Adapter時(shí)加入checkbox.setTag(position)這樣一句代碼。這里checkbox為當(dāng)前列表項(xiàng)的復(fù)選框,position為當(dāng)前列表項(xiàng)位置。然后為checkbox設(shè)置點(diǎn)擊事件,checkbox.setOnClickLinster(this)。最后在onClick(View v)方法中通過(guò)switch(v.getTag()){case 1: .......}方式設(shè)置點(diǎn)擊事件

我的解決方法:
引入一個(gè)ArrayList<Boolean>列表,記錄每一項(xiàng)當(dāng)前的狀態(tài),然后在getView()中這樣使用:holder.checkBox_3.setChecked(checkPosition_3.get(position));
具體看下面:

    
private List<Boolean> checkPosition_3,checkPosition_1,checkPosition_0;
 class ListViewAdapter extends BaseAdapter{
    	private Context context;
    	public ListViewAdapter(Context context){
    		this.context=context;
    		checkPosition_3 = new ArrayList<Boolean>(ITEMS);
    		checkPosition_1 = new ArrayList<Boolean>(ITEMS);
    		checkPosition_0 = new ArrayList<Boolean>(ITEMS);
    		for(int i=0;i<ITEMS;i++){
    			checkPosition_3.add(false);
    			checkPosition_1.add(false);
    			checkPosition_0.add(false);
    		}
    	}
		public int getCount() {
			// TODO Auto-generated method stub
			return model.getItems().size();
		}

		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return model.getItems().get(position);
		}

		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public boolean isEnabled(int position) {
			// TODO Auto-generated method stub
			return false;
		}
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			final ViewHolder holder;
			if(convertView==null){
				holder=new ViewHolder();
				convertView=LayoutInflater.from(context).inflate(R.layout.simple_list_item_zc14or9, null);
				holder.serial = (TextView)convertView.findViewById(R.id.serial);//序號(hào)
				holder.SS = (TextView)convertView.findViewById(R.id.SS);//賽事
				holder.ZDandKD = (TextView)convertView.findViewById(R.id.ZDandKD);//主隊(duì) VS 客隊(duì)
				holder.BSSJ = (TextView)convertView.findViewById(R.id.BSSJ);//比賽時(shí)間
				
				holder.checkBox_3 = (CheckBox)convertView.findViewById(R.id.checkBox_3);//
				holder.checkBox_1 = (CheckBox)convertView.findViewById(R.id.checkBox_1);//
				holder.checkBox_0 = (CheckBox)convertView.findViewById(R.id.checkBox_0);//
				
				convertView.setTag(holder);
			}else{
				holder = (ViewHolder) convertView.getTag();
			}
			ZC instance=model.getItems().get(position);
			
			holder.serial.setText(instance.serial);
			holder.SS.setText(instance.SS);
			holder.ZDandKD.setText(instance.ZD+" VS "+instance.KD);
			holder.BSSJ.setText(instance.BSSJ);
			
			//為了解決關(guān)于ListView+CheckBox,Item超過(guò)一屏?xí)r數(shù)據(jù)錯(cuò)亂
			holder.checkBox_3.setId(position); 
			holder.checkBox_3.setChecked(checkPosition_3.get(position));
			holder.checkBox_3.setOnCheckedChangeListener(new OnCheckedChangeListener(){

				public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
					// TODO Auto-generated method stub
					int id = buttonView.getId();
					checkPosition_3.set(id,isChecked); //賦值
					updateTextViewInfo();
				}
				
			});
			holder.checkBox_1.setId(position); 
			holder.checkBox_1.setChecked(checkPosition_1.get(position));
			holder.checkBox_1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
				
				public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
					// TODO Auto-generated method stub
					int id = buttonView.getId();
					checkPosition_1.set(id,isChecked); //賦值
					updateTextViewInfo();
				}
				
			});
			holder.checkBox_0.setId(position); 
			holder.checkBox_0.setChecked(checkPosition_0.get(position));
			holder.checkBox_0.setOnCheckedChangeListener(new OnCheckedChangeListener(){

				public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
					// TODO Auto-generated method stub
					int id = buttonView.getId();
					checkPosition_0.set(id,isChecked); //賦值
					updateTextViewInfo();
				}
				
			});
			return convertView;
		}
    	
		class ViewHolder {
			TextView serial;//序號(hào)
			TextView SS;//賽事
			TextView ZDandKD;//主隊(duì) VS 客隊(duì)
			TextView BSSJ;//比賽時(shí)間
			
			CheckBox checkBox_3,checkBox_1,checkBox_0;
        }
		
    }

  

我這里一個(gè)Item里面有3個(gè)CheckBox,所以有三個(gè)ArrayList<Boolean>列表。


關(guān)于ListView中加入并選取checkbox錯(cuò)位的問(wèn)題


如果在ListView中存在EditText的話,也會(huì)存在錯(cuò)亂問(wèn)題。
解決方法 http://blog.sina.com.cn/s/blog_80f8936801012cp7.html
雖然也不那么優(yōu)美!

關(guān)于ListView中加入并選取checkbox錯(cuò)位的問(wèn)題


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 吉首市| 怀远县| 根河市| 高邑县| 鄂伦春自治旗| 赤峰市| 浦东新区| 寻甸| 攀枝花市| 来凤县| 青河县| 万安县| 蓬溪县| 金昌市| 山西省| 四平市| 商丘市| 香格里拉县| 贵州省| 论坛| 根河市| 文昌市| 锦州市| 梁平县| 晋城| 信阳市| 蓝山县| 峨边| 融水| 厦门市| 胶州市| 娄烦县| 大埔县| 德钦县| 日喀则市| 黎平县| 无为县| 尉犁县| 田东县| 宿迁市| 囊谦县|