こんにちは私はチェックボックスを使ってリストビューを持っていますが、チェックボックスをチェックしてチェックチェンジしたリスナーのリストをスクロールすると "ischecked"と "else"チェックされたチェックボックスが消えたときにスクロールすると、その状態は維持されません。 チェックボックスをチェックすると(ischecked)コールし、チェックボックスをオフにすると「else」が呼び出されます。チェックボックス呼び出しのあるListViewとスクロール時の両方が同じです
は、ここでは、コード内でmCheckBox.setCheck(value)
を呼び出すときにCheckBox
をクリックしたとき、または呼び出します私のアダプタクラス
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)行1のチェックボックスをクリックし、この従業員を確認してください 2)行5をタッチしてリストビューをスクロールします 3)行5がまだListViewの表示セットにある間に指を離します。 ==結果== - 行5は現在チェックされているかチェックされていませんか? どの行が状態を変更しましたか? –
チェックボックスの位置が変わっていないリストの最初のチェックボックスを押してリストをスクロールすると、リスト内の "else"条件が実行されます。実行します。 –
私は、ビューの位置は変化しているが、チェックボックスの状態は変わっていないとは言いません。これは、多くの要因によって引き起こされる可能性があるため、実際にはステップごとに再生シナリオを作成すると便利です。スクロール中にチェックボックスの状態が変化し、特定のビューホールダーが可視のリストビュー領域から外れますか?あなたが私の質問に答えなかったり、上記のように再現シナリオを提供しないと、私はあなたを助けることができません。 –