我已经使用baseAdepter显示三个View in list。 前两个是textView,最后一个是checkBox View。 但是,当我要检查checkBox并滚动列表时,在某个特定数量的项目之后,另一个复选框会自动检查,无法使用..
我不知道为什么会发生这种事情。
是否有人知道解决方案..
这是我的baseadepter代码..
private static class AdepterGetUnit extends BaseAdapter{
private LayoutInflater mInflater;
public AdepterGetUnit (Context context){
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
positionList = sharedPreferences.getInt(UnitScreen.POSITION, 0);
if(positionList==0){currentListLenght=ArrayHolder.dbSpeed.size();}
else if(positionList==1){currentListLenght=ArrayHolder.dbAngle.size();}
else if(positionList==2){currentListLenght=listTemperature.length;}
else if(positionList==3){currentListLenght=ArrayHolder.dbLenght.size();}
else if(positionList==4){currentListLenght=ArrayHolder.dbWeightMass.size();}
else if(positionList==5){currentListLenght=ArrayHolder.dbPressure.size();}
else if(positionList==6){currentListLenght=ArrayHolder.dbPower.size();}
else if(positionList==7){currentListLenght=ArrayHolder.dbCurrency.size();}
else if(positionList==8){currentListLenght=ArrayHolder.dbDataSize.size();}
else if(positionList==9){currentListLenght=ArrayHolder.dbVolume.size();}
else if(positionList==10){currentListLenght=ArrayHolder.dbTime.size();}
else if(positionList==11){currentListLenght=ArrayHolder.dbArea.size();}
else if(positionList==12){currentListLenght=ArrayHolder.dbCoocking.size();}
return currentListLenght;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView==null){
convertView = mInflater.inflate(R.layout.row_edit_unit, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.txt_show_units);
holder.textTotle = (TextView) convertView.findViewById(R.id.txt_unit);
holder.checkBox = (CheckBox) convertView.findViewById(R.id.check_box);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
// positionList = sharedPreferences.getInt(UnitScreen.POSITION, 0);
switch (positionList) {
case 0:
holder.text.setText(ArrayHolder.dbSpeed.get(position));
holder.textTotle.setText(ArrayHolder.dbSpeedUnit.get(position));
txtUnitTitleName.setText("Speed");
break;
case 1:
holder.text.setText(ArrayHolder.dbAngle.get(position));
holder.textTotle.setText(ArrayHolder.dbAngleUnit.get(position));
txtUnitTitleName.setText("Angle");
break;
case 2:
holder.text.setText(ArrayHolder.dbTemperature.get(position));
holder.textTotle.setText(ArrayHolder.dbTemperatureUnit.get(position));
txtUnitTitleName.setText("Temperature");
break;
case 3:
holder.text.setText(ArrayHolder.dbLenght.get(position));
holder.textTotle.setText(ArrayHolder.dbLenghtUnit.get(position));
txtUnitTitleName.setText("Lenght");
break;
case 4:
holder.text.setText(ArrayHolder.dbWeightMass.get(position));
holder.textTotle.setText(ArrayHolder.dbWeightMassUnit.get(position));
txtUnitTitleName.setText("Weight/Mass");
break;
case 5:
holder.text.setText(ArrayHolder.dbPressure.get(position));
holder.textTotle.setText(ArrayHolder.dbPressureUnit.get(position));
txtUnitTitleName.setText("Pressure");
break;
case 6:
holder.text.setText(ArrayHolder.dbPower.get(position));
holder.textTotle.setText(ArrayHolder.dbPowerUnit.get(position));
txtUnitTitleName.setText("Power");
break;
case 7:
holder.text.setText(ArrayHolder.dbCurrency.get(position));
holder.textTotle.setText(ArrayHolder.dbCurrencyUnit.get(position));
if(!holder.checkBox.isChecked())
holder.checkBox.setChecked(false);
else
holder.checkBox.setChecked(true);
txtUnitTitleName.setText("Currency");
break;
case 8:
holder.text.setText(ArrayHolder.dbDataSize.get(position));
holder.textTotle.setText(ArrayHolder.dbDataSizeUnit.get(position));
txtUnitTitleName.setText("DataSize");
break;
case 9:
holder.text.setText(ArrayHolder.dbVolume.get(position));
holder.textTotle.setText(ArrayHolder.dbVolumeUnit.get(position));
txtUnitTitleName.setText("Volume");
break;
case 10:
holder.text.setText(ArrayHolder.dbTime.get(position));
holder.textTotle.setText(ArrayHolder.dbTimeUnit.get(position));
txtUnitTitleName.setText("Time");
break;
case 11:
holder.text.setText(ArrayHolder.dbArea.get(position));
holder.textTotle.setText(ArrayHolder.dbAreaUnit.get(position));
txtUnitTitleName.setText("Area");
break;
case 12:
holder.text.setText(ArrayHolder.dbCoocking.get(position));
txtUnitTitleName.setText("Coocking");
break;
default:
break;
}
return convertView;
}
static class ViewHolder {
TextView text ,textTotle;
ImageView icon;
CheckBox checkBox;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position-1;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position-1;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
}
答案 0 :(得分:1)
尝试以下代码。你的答案是对的,我刚编辑过。
package com.android.diseaseRating;
import java.util.Vector;
import com.android.diseaseRating.db.DBConnect;
import com.android.diseaseRating.settings.SettingsList;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
public class ColorPickerBase1 extends BaseAdapter{
public ColorPickerBase1(Context context , Vector<String> colorName ,Vector<String> colorHex) {
layoutInflater = LayoutInflater.from(context);
this.colorHex = colorHex;
this.colorName = colorName;
dbConnect = new DBConnect(context, Bean.DATABASE_NAME);
}
@Override
public int getCount() {
return colorName.size();
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder holder ;
if(convertView==null){
holder = new viewHolder();
convertView = layoutInflater.inflate(R.layout.row_color_picker, null);
holder.imgColorView = (ImageView)convertView.findViewById(R.id.imgViewColor);
holder.txtColorName = (TextView)convertView.findViewById(R.id.txtColorName);
holder.chkBoxColorCked = (CheckBox)convertView.findViewById(R.id.chkBOx);
boolean stop=true;
if(SettingsList.SETTING)
holder.chkBoxColorCked.setEnabled(false);
convertView.setTag(holder);
}
else{
holder = (viewHolder)convertView.getTag();
}
System.out.println("TEH POSITION IS "+position ) ;
System.out.println("TEH COLOR IS "+colorHex.get(position) ) ;
if (position == 801 || position == 802 || position == 803
|| position == 1009 || position == 1011 || position == 1013
|| position == 1012 || position == 1017 || position == 1018
|| position == 1019 || position == 1024 || position == 1026
|| position == 1027 || position == 1028 || position == 1029
|| position == 1030 || position == 1029 || position == 1030
|| position == 1049 || position == 1068 || position == 1076
|| position == 1082) {
}
else{
try {
holder.imgColorView.setBackgroundColor(Color.parseColor("#"
+ colorHex.get(position)));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
holder.txtColorName.setText("" + colorName.get(position));
}
holder.chkBoxColorCked.setTag(position);
holder.chkBoxColorCked.setOnCheckedChangeListener(btnChkListner);
if(Bean.tempVector.get(position)){
holder.chkBoxColorCked.setChecked(true);
}
else{
holder.chkBoxColorCked.setChecked(false);
}
return convertView;
}
CompoundButton.OnCheckedChangeListener btnChkListner = new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
//s("onCheckedChanged", "onCheckedChanged");
final int positionChecked = (Integer)buttonView.getTag();
//System.out.println("Position ====="+positionChecked);
if(buttonView.isChecked())
{
Bean.colorRangeOnePicker1.add(positionChecked);
Bean.tempVector.set(positionChecked, true);
if(Bean.colorRangeOnePicker1.size()>2){
Bean.colorRangeOnePicker1.remove(0);
// String SQL = "UPDATE DisplaySettings SET range1color1 = '"+Bean.colorRangeOnePicker1.get(0) +"',range1color2 ='"+Bean.colorRangeOnePicker1.get(1)+"' where id ='"+ImageDisplay.SettingID+"'";
//
// dbConnect.execNonQuery(SQL);
}
System.out.println("COLOR RANGE ONE IS "+Bean.colorRangeOnePicker1);
//System.out.println("IN IF ...IS CHEKED ");
}
else{
Bean.tempVector.set(positionChecked, false);
}
for(int i=0; i<3; i++){
}
}
};
LayoutInflater layoutInflater ;
class viewHolder{
ImageView imgColorView;
TextView txtColorName;
CheckBox chkBoxColorCked;
}
Vector<String > colorName;
Vector<String> colorHex;
DBConnect dbConnect;
}