你好我有一个带有复选框的列表视图,我的问题是当我选中复选框并滚动列表中的checkchanged监听器“缺陷”和“其他”都执行我认为在滚动时,当复选框复选框消失它不保持其州 我希望当我选中复选框(缺血)应该打电话,当我取消选中复选框“别”应该打电话。
这是我的Adapter类
public class NamesAdapter extends BaseAdapter {
private List<EmployeeModel> employeeModelList;
private Context context;
private EmployeeModel employeeModel;
private ListView listView;
public static String check = "stop";
public String name;
int ii;
int getPosition;
boolean isShowing = false;
public NamesAdapter(List<EmployeeModel> employeeModelList, Context context) {
this.employeeModelList = employeeModelList;
this.context = context;
}
@Override
public int getCount() {
return employeeModelList.size();
}
@Override
public Object getItem(int i) {
// return employeeModelList.get(i);
return employeeModelList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView( int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder=null;
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.empname_listview_model, null);
viewHolder = new ViewHolder();
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.checkBox);
convertView.setTag(viewHolder);
convertView.setTag(R.id.checkBox, viewHolder.checkbox);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// Here we get the position that we have set for the checkbox using setTag.
// Set the value of checkbox to maintain its state.
//employeeModel = employeeModelList.get(position);
//name = employeeModel.getName();
getPosition = (Integer) buttonView.getTag();
employeeModelList.get(getPosition).setChecked(buttonView.isChecked());
if (isChecked){
//getPosition = finalViewHolder.checkbox.getId();
check="start";
Toast.makeText(context, "This is if", Toast.LENGTH_SHORT).show();
displayEmployeeNamesData();
}
else {
check="stop";
Toast.makeText(context, "This is else", Toast.LENGTH_SHORT).show();
}
}
});
viewHolder.checkbox.setTag(position); // This line is important.
viewHolder.checkbox.setText(employeeModelList.get(position).getName());
viewHolder.checkbox.setChecked(employeeModelList.get(position).isChecked());
return convertView;
}
public void displayEmployeeNamesData() {
NewEmployeeDBTable newEmployeeDBTable = new NewEmployeeDBTable(context);
SQLiteDatabase dataBase = newEmployeeDBTable.getWritableDatabase();
//the SQL command to fetched all records from the table
String sql = "SELECT eid FROM "
+ NewEmployeeDBTable.EmployeNameTable + " where ename='" + name + "'";
Cursor mCursor = dataBase.rawQuery(sql, null);
if (mCursor.moveToFirst()) {
do {
ii = mCursor.getInt(mCursor.getColumnIndex(NewEmployeeDBTable.eid));
}
while (mCursor.moveToNext());
}
mCursor.close();
}
private static class ViewHolder {
CheckBox checkbox;
}
}
}
答案 0 :(得分:0)
OnCheckedChangeListener()
或在代码中拨打CheckBox
时, mCheckBox.setCheck(value)
会致电。
当您在ListView
上滚动时,getView()
方法会调用重新创建ListView
行,并在getView()
内拨打viewHolder.checkbox.setChecked(...)
=&gt; OnCheckedChangeListener
致电
要解决此问题,您可以使用setOnClickListener
之类的
final EmployeeModel employee = employeeModelList.get(getPosition);
holder.mCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
employee.setChecked(!employee.isChecked());
}
});
viewHolder.checkbox.setChecked(employee.isChecked());
因为OnClickListener()
在您拨打viewHolder.checkbox.setChecked(...)