Visualizzazione stampabile
-
listview con spinner
salve ragazzi..qualcuno mi sa dire come realizzare una listview con uno spinner per ogni riga??? mi spiego meglio..ho una listview dove ogni elemento,quindi ogni riga,deve contenere una Textview ed uno spinner...rispettivamente da sinistra verso destra...ora io in realtà ho trovato del materiale su internet e l'ho fatta però non funnziona...in particolare mi sono riferito a questi post :
Android ListView with Spinner and get its value - Stack Overflow
Android ListView with Spinner and get its value - Stack Overflow
ma non sono esempi funzionanti...o meglio funzionano ma solo nel caso in cui nella listview vengono inserite al massimo un numero di righe che non consentano di "scorrere" l'activity...cioè per esempio con 15 righe io dovrei scorrere la listview..consideriamo il caso in cui io nella prima riga setti il valore dello spinner ad 1..scorrendo la lista se vado a settare il valore dello spinner della riga 10 allora mi viene modificato in automatico quello della riga 1 e cosi via...è come se fosse ciclica la cosa...
per favore aiutatemi sto impazzendo...inutile che posto codice perchè è lo stesso esempio dei due link postati qui sopra...
helppppppppppppppppp
-
Quote:
Originariamente inviato da
dragonfly89
salve ragazzi..qualcuno mi sa dire come realizzare una listview con uno spinner per ogni riga??? mi spiego meglio..ho una listview dove ogni elemento,quindi ogni riga,deve contenere una Textview ed uno spinner...rispettivamente da sinistra verso destra...ora io in realtà ho trovato del materiale su internet e l'ho fatta però non funnziona...in particolare mi sono riferito a questi post :
Android ListView with Spinner and get its value - Stack Overflow
Android ListView with Spinner and get its value - Stack Overflow
ma non sono esempi funzionanti...o meglio funzionano ma solo nel caso in cui nella listview vengono inserite al massimo un numero di righe che non consentano di "scorrere" l'activity...cioè per esempio con 15 righe io dovrei scorrere la listview..consideriamo il caso in cui io nella prima riga setti il valore dello spinner ad 1..scorrendo la lista se vado a settare il valore dello spinner della riga 10 allora mi viene modificato in automatico quello della riga 1 e cosi via...è come se fosse ciclica la cosa...
per favore aiutatemi sto impazzendo...inutile che posto codice perchè è lo stesso esempio dei due link postati qui sopra...
helppppppppppppppppp
Guarda, così di primo acchitto direi che ti sei imbattuto nel problema del recycle delle View in una ListView. Android re-cicla le View.
Io l'ho incontrato implementando una ListView dove ogni element conteneva, tra l'altro, un checkBox. Ebbene, in fase di scrolling, visivamente i checkbox selezionati e deselezionati non conservavano la visualizzazione 'corretta' per la loro posizione in lista, ma l'intera View era proprio wrong, e ogni volta che scorrevi dall'alto in basso e viceversa, cambiava la visualizzazione di CheckBox selezionati... un bel problema.
Se magari posti l'intera classe possiamo iniziare ad analizzarla.
Intanto prova a googlare 'android prevent recycled ListView' e simili
Ho risolto con dei BaseAdapter che estendevano la ListView conservando i valori di ogni singolo element in una sottoclasse 'Holder' di mantenimento
-
Guarda, così di primo acchitto direi che ti sei imbattuto nel problema del recycle delle View in una ListView. Android re-cicla le View.
Io l'ho incontrato implementando una ListView dove ogni element conteneva, tra l'altro, un checkBox. Ebbene, in fase di scrolling, visivamente i checkbox selezionati e deselezionati non conservavano la visualizzazione 'corretta' per la loro posizione in lista, ma l'intera View era proprio wrong, e ogni volta che scorrevi dall'alto in basso e viceversa, cambiava la visualizzazione di CheckBox selezionati... un bel problema.
Se magari posti l'intera classe possiamo iniziare ad analizzarla.
Intanto prova a googlare 'android prevent recycled ListView' e simili
Ho risolto con dei BaseAdapter che estendevano la ListView conservando i valori di ogni singolo element in una sottoclasse 'Holder' di mantenimento
esatto è proprio quello il problema ma non riesco ad uscirne credimi sto uscendo pazzo...sisi ho adottato il BaseAdapter come mi suggerivi e la classe HOlder...ad ogni modo ti mando il codice..è chiaro che il problema sta nel metodo GetView della classe che estende BaseAdapter..è li che va "giostrato" un qualcosa per far si che lo spinner in fase di scroll non cambi i valori...
incollo il codice...
Quote:
public class ChooseBet extends Activity implements OnItemClickListener,MatchView{
private Spinner spinner;
private Button submit;
ListView listView;
List<RowItem> rowItems;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chose_better);
submit = (Button)findViewById(R.id.Submit);
/*
HO UN VETTORE DI INCONTRI...PER OGNI INCOTRO MI CREO UN'ISTANZA DI ROWITEM...ALLA FINE PASSO L'ARRAYLIST DI ROWITEM AL BASEADAPTER
*/
rowItems = new ArrayList<RowItem>();
for (int i = 0; i < matchSelected.size(); i++) {
RowItem item = new RowItem( matchSelected.get(i),this);
rowItems.add(item);
}
listView = (ListView) findViewById(android.R.id.list);
CustomBaseAdapter adapter = new CustomBaseAdapter(this, rowItems);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Listener listener = new Listener(getApplicationContext());
listener.prova();
}
}) ;
}
}
Quote:
public class CustomBaseAdapter extends BaseAdapter implements MatchView{
Context context;
List<RowItem> rowItems;
private ArrayAdapter<String> adapter;
public int cont = 0;
public CustomBaseAdapter(Context context, List<RowItem> items) {
this.context = context;
this.rowItems = items;
}
/*private view holder class*/
private static class ViewHolder {
// ImageView imageView;
RowItem row;
Spinner spinner;
TextView txtTitle;
TextView txtDesc;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity. LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
// holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
// holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
holder.spinner = (Spinner) convertView.findViewById(R.id.spin);
convertView.setTag(holder);
adapter = new ArrayAdapter<String>(context,android.R.layout.simp le_spinner_item, bet);
adapter.setDropDownViewResource(android.R.layout.s imple_spinner_dropdown_item);
holder.spinner.setAdapter(adapter);
final ViewHolder h = holder;
holder.spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,int position, long arg3) {
// TODO Auto-generated method stub
String choseBet = h.spinner.getItemAtPosition(position).toString();
String text = h.txtTitle.getText().toString();
if(!betSelected.containsKey(text)){
betSelected.put(text, choseBet);
}
else{
betSelected.remove(text);
betSelected.put(text, choseBet);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
else {
holder = (ViewHolder) convertView.getTag();
}
RowItem rowItem = (RowItem) getItem(position);
// holder.txtDesc.setText(rowItem.getDesc());
holder.txtTitle.setText(rowItem.getTitle());
// holder.imageView.setImageResource(rowItem.getImage Id());
return convertView;
}
@Override
public int getCount() {
return rowItems.size();
}
@Override
public Object getItem(int position) {
return rowItems.get(position);
}
@Override
public long getItemId(int position) {
return rowItems.indexOf(getItem(position));
}
}
Quote:
public class RowItem implements MatchView{
private int imageId;
private String title;
private String desc;
private ArrayAdapter<String> adapter;
private int selected;
public RowItem( String title,Context parent) {
this.title = title;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return title + "\n" + desc;
}
public ArrayAdapter<String> getAdapter() {
return adapter;
}
public void setSelected(int selected) {
this.selected = selected;
}
}
-
mmm... hai esteso la classe BaseAdapter per poter gestire un getView() personalizzato.
Il tuo problema probabilmente sorge dal fatto che nel metodo getView() della tua classe estesa CustomBaseAdapter gestisci soltanto if (convertView == null) e basta. Se convertView è diverso da null: ritorna una vista riciclata, e sei al punto di partenza.
Inoltre non è conveniente ritornare direttamente la convertView (return convertView), che è un parametro del metodo getView(). Dovresti istanziare una View uguale all'oggetto grafico custom che gestisci nella classe estesa e inizializzarlo alla convertView, per poi tornare quella view, non direttamente la convertView.
Mettiamo il caso che la tua classe estesa CustomBaseAdapter debba essere utilizzata per un GridView. Il metodo getView() deve essere:
codice:
public View getView(int position, View convertView, ViewGroup parent) {
View gridView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
gridView = inflater.inflate(R.layout.celladellagridview, parent, false);
} else {
gridView = (View) convertView;
}
...
operazioni varie...
...
return gridView; // e non return convertView
}
prova a modificare opportunamente il codice con questo approccio. Dovresti risolvere.
Quote:
Originariamente inviato da
dragonfly89
Guarda, così di primo acchitto direi che ti sei imbattuto nel problema del recycle delle View in una ListView. Android re-cicla le View.
Io l'ho incontrato implementando una ListView dove ogni element conteneva, tra l'altro, un checkBox. Ebbene, in fase di scrolling, visivamente i checkbox selezionati e deselezionati non conservavano la visualizzazione 'corretta' per la loro posizione in lista, ma l'intera View era proprio wrong, e ogni volta che scorrevi dall'alto in basso e viceversa, cambiava la visualizzazione di CheckBox selezionati... un bel problema.
Se magari posti l'intera classe possiamo iniziare ad analizzarla.
Intanto prova a googlare 'android prevent recycled ListView' e simili
Ho risolto con dei BaseAdapter che estendevano la ListView conservando i valori di ogni singolo element in una sottoclasse 'Holder' di mantenimento
esatto è proprio quello il problema ma non riesco ad uscirne credimi sto uscendo pazzo...sisi ho adottato il BaseAdapter come mi suggerivi e la classe HOlder...ad ogni modo ti mando il codice..è chiaro che il problema sta nel metodo GetView della classe che estende BaseAdapter..è li che va "giostrato" un qualcosa per far si che lo spinner in fase di scroll non cambi i valori...
incollo il codice...
-
uhmm no purttroppo non funziona lo stesso...avevo già provato a farlo come mi hai suggerito ma non funziona lo stesso..sia che ritorno direttamente l'oggetto convertView o che ritorno l'oggetto gridView,per esempio,non funziona lo stesso...ovviamente anche facendogli ritornare direttamente l'oggeto gridView...non ne vuol sapere insomma :-(
-
Ti va di impacchettarmi l'intero progetto? A questo punto, senza una visione completa, non riesco ad aiutarti
Inviato dal mio Galaxy Nexus con Tapatalk 2
-
ok te lo mando chissà riesci a darmi una mano..tieni presente che il tutto è in fase di costruzione quindi troverai "lavori in corso" :-) ma per quello che devi testare va bene insomma...ti spiego brevemente..alla prima schermata clicca sul pallone..ti verrà aperta una lista di competizioni,clicchi e ti selezioni le squadre..a questo punto entri nell'activity che ha il problema..ovvero la listView dove per ogni riga vi è la textView e lo spinner...seleziona piu di 10 squadre in modo tale che dovrai fare lo scroll della listView imputata e ti renderai conto che lo spinner cambia i valori...una sola domanda...come faccio a mandarti l'intero prog qui?? magari se posso te lo mando via mail anche perchè qui non mi sembrerebbe il caso diciamo o_O
-
Fai uno zip e postalo su dropbox/simili. Mandami in pvt il link
Inviato dal mio Galaxy Nexus con Tapatalk 2
-
ok ti ho appena mandato il link del progetto sul tuo indirizzo email presente sul tuo profilo..spero tu mi possa aiutare..aspetto tue notizie...buona Pasqua :-)