Ho una lista di visualizzazione [visualizzazione testo e controlli casella di controllo] con più dati. Sceglierò la voce dalla visualizzazione elenco e visualizzerò gli elementi selezionati nella prossima attività. Il mio problema è, per esempio se scelgo il ventesimo e il venticinquesimo elemento nella visualizzazione elenco, visualizzerò alcuni altri elementi nella prossima attività. Questa è la vista della lista è cambiata durante lo scorrimento.la vista della lista è cambiata quando si scorre su Android
sto scegliendo un articolo facendo clic sulla casella di controllo sull'elemento. nel listener checkbox.setOnChanged ho scritto il codice per cui la posizione è selezionata o meno. se scelgo il 25 ° elemento e scorri la vista elenco, viene chiamato il metodo getview e il metodo checkbox.setonChanged cambia la posizione selezionata. Finalmente stampo il logcat.
mio formato di codifica:
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;
}
}
risultato 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
come stai selezionati gli elementi. se vuoi ottenere il 25 ° elemento, normalmente fai qualcosa come getListView(). getAdapter.getItem (25); – blessenm
sto selezionando un elemento facendo clic sulla casella di controllo sulla voce di elenco. questo è il metodo viewHolder.checkbox.setOnCheckedChangeListener (..) nel metodo getView –