Tengo vista de lista [controles de vista de texto y casilla de verificación] con más datos. Elegiré el elemento de la vista de lista y mostraré los elementos seleccionados en la siguiente actividad. Mi problema es que, por ejemplo, si elijo el 20º y el 25º elemento en la vista de lista, se mostrarán otros elementos en la siguiente actividad. Esa es la posición de la vista de lista se está cambiando cuando se desplaza.la posición de la vista de lista se está modificando al desplazarse por android
Estoy eligiendo un elemento haciendo clic en la casilla de verificación del artículo. en la casilla de verificación.setOnChanged oyente escribí código para qué posición se selecciona o no. si elijo el 25º elemento y desplazo la vista de lista, se llama al método getview y el método checkbox.setonChanged cambia la posición seleccionada. Imprimo el logcat por fin.
Mi formato de codificación:
public class ListContact extends ListActivity {
public void onCreate(Bundle icicle){
.....
ArrayAdapter<Model> adapter = new MyCustomArrayAdapter(this,getModel());
setListAdapter(adapter);
}
....
private List<Model> getModel() {
List<Model> list = new ArrayList<Model>();
Iterator<String> itr = constant.selectname.iterator();
while (itr.hasNext()) {
list.add(get(itr.next().toString()));
}
return list;
}
private Model get(String s) {
return new Model(s);
}
}
MyCustomArrayAdapter.java:
public class MyCustomArrayAdapter extends ArrayAdapter<Model> {
private final List<Model> list;
private final Activity context;
constant con ;
public MyCustomArrayAdapter(Activity context, List<Model> list) {
super(context, R.layout.list_layout, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected CheckBox checkbox;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// Log.e("getview", "getview");
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.list_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
// con = new constant();
Model element = (Model) viewHolder.checkbox.getTag();
element.setSelected(buttonView.isChecked());
// Log.e("MyCustomArrayAdapter.java", "selectpos array list length"+constant.selectpos.size());
if(isChecked==true){
Log.e("check box value and position ", element.getName());
Log.e("position", ""+position);
con.selectpos.set(position, 1);
}
else{
Log.e("position unselect", ""+position +"---------"+ element.getName());
con.selectpos.set(position, 0);
}
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
holder.checkbox.setChecked(list.get(position).isSelected());
return view;
}
}
resultado Logcat:
02-08 10:44:28.142: E/check box value and position(293): AAAA Qqq
02-08 10:44:28.142: E/check box value and position(293): Mobile-123
02-08 10:44:28.152: E/position(293): 0
**after scrolling the list view some other item print 0th position unselected and wrong data:**
02-08 10:44:31.962: E/position unselect(293): 0---------F212
02-08 10:44:31.962: E/position unselect(293): Home-232
how are you seleccionar elementos. si desea obtener los artículos 25, normalmente hace algo como getListView(). getAdapter.getItem (25); – blessenm
estoy seleccionando un elemento haciendo clic en la casilla de verificación en el elemento de la lista. esto está llamando al método viewHolder.checkbox.setOnCheckedChangeListener (..) en el método getView –