Tengo un problema con la vista de lista que elemento de la lista contiene una casilla de verificación. ¡Cuando miro una caja y una lista de desplazamiento, la casilla de verificación en algún momento se cambia la llamada automática oncheckedchange y el valor de la casilla de verificación!casilla de verificación llamada automática enCheckedChange cuando listview scroll?
O, cuando mi lista tiene más de 9 o 10 artículo, a continuación, cuando llegué al punto 1, el punto 8 o 9 se comprueba ???
Alguien me puede decir qué puedo solucionar este error?
¡Gracias de antemano!
list_item.xml
<ImageView
android:layout_alignParentLeft="true"
android:layout_width="36dip"
android:layout_height="36dip"
android:layout_centerVertical="true"
android:scaleType="fitCenter"
android:id="@+id/image_view"
android:src="@drawable/icon" />
<TextView android:layout_toRightOf="@id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dip"
android:id="@+id/text_view"
android:lines="1"
android:textSize="20sp"
android:textColor="@color/white" />
<TextView android:layout_toRightOf="@id/image_view"
android:layout_below="@id/text_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dip"
android:id="@+id/text_view2"
android:textSize="14sp"
android:lines="1"
android:textColor="@color/white" />
y aquí es una vista del adaptador:
public View getView(int position, View convertView, ViewGroup parent) {
Log.e(TAG, "getView");
ViewHolder mViewHolder;
if (convertView == null) {
Log.e(TAG, "Inflater is inflating...");
convertView = mInflater.inflate(R.layout.custom_list_app, null);
mViewHolder = new ViewHolder();
mViewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
mViewHolder.remove = convertView.findViewById(R.id.music_info);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
Log.e(TAG, "Position: " + position + " CheckBox: " + mViewHolder.checkbox.isChecked());
}
mViewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton cb, boolean flag) {
// TODO Auto-generated method stub
if (flag) {
Log.d(TAG, "Checkbox checked");
} else {
Log.d(TAG, "Checkbox un-checked");
}
}
});
return convertView;
}
Creo que la solución es la siguiente. Utilizo una matriz para almacenar la posición cuando la casilla de verificación está marcada y verifico dónde está marcada la posición antes de llamar a setOnCheckedChangeListener. ¡Pero cuando cambio la lista (no marca) la posición donde está marcada ha cambiado! No entiendo por qué ocurre – khaintt
Bueno, SIEMPRE deberías llamar a 'setOnCheckedChangeListener', pero deberías usar el argumento' position' para 'getView' para decir si la casilla de verificación debe o no marcarse y cambiarla apropiadamente CADA VEZ' getView 'se llama. – Femi
Déjeme repetir eso: DEBE invocar 'setChecked (true)' o 'setChecked (false)' CADA vez que se llame a 'getView' si está anulando' getView'. – Femi