CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 10 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 9 su 9
Discussione:

listview con spinner

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Nov 2012
    Messaggi
    23

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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

  2.  
  3. #2
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da dragonfly89 Visualizza il messaggio
    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
    Ultima modifica di frank17next; 28-03-13 alle 20:26 - Motivo: correzione ortografica
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  4. #3
    Baby Droid


    Registrato dal
    Nov 2012
    Messaggi
    23

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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...

    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();

    }
    }) ;
    }

    }

    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));
    }
    }

    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;
    }
    }

  5. #4
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    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 Visualizza il messaggio
    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...
    Ultima modifica di frank17next; 30-03-13 alle 11:54
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  6. #5
    Baby Droid


    Registrato dal
    Nov 2012
    Messaggi
    23

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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 :-(

  7. #6
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    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
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  8. #7
    Baby Droid


    Registrato dal
    Nov 2012
    Messaggi
    23

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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

  9. #8
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Fai uno zip e postalo su dropbox/simili. Mandami in pvt il link

    Inviato dal mio Galaxy Nexus con Tapatalk 2
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  10. #9
    Baby Droid


    Registrato dal
    Nov 2012
    Messaggi
    23

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    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 :-)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy