带有复选框的ListView调用ischecked,否则同时滚动

时间:2017-05-16 08:27:02

标签: android listview checkbox

你好我有一个带有复选框的列表视图,我的问题是当我选中复选框并滚动列表中的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;
}
}
}

1 个答案:

答案 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(...)

时不会打电话