Autore Topic: Aiuto su Spinner  (Letto 498 volte)

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Aiuto su Spinner
« il: 03 Dicembre 2012, 20:17:06 CET »
0
ciao a tutti!
carico uno Spinner prendendo i dati da remoto in formato JSON.
fin qua tutto ok.
solo che vorrei che fosse selezionata una determinata opzione.
il valore glielo passerei da un'altra activity.
solo che non so come fare, o meglio quello che ho fatto adesso non seleziona mai il valore giusto.
prima ho creato una classe wrapper del genere:
Codice: [Seleziona]
public class Causali {

        private int id;
        private String nome;

        public Causali(int id, String nome) {
                this.id = id;
                this.nome = nome;
        }

        public int getId() {
                return this.id;
        }

        public String getNome() {
                return this.nome;
        }

        @Override
        public String toString() {
                return this.nome;
        }
}
poi nell'activity:
Codice: [Seleziona]
public class SingleItemActivity  extends Activity {
       
        private Intent intent = null;
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_item);
        intent = getIntent();
        new AsyncConnection().execute("");
        }
       
        private class AsyncConnection extends AsyncTask<Object, Object, Object> {
               
                private ArrayAdapter<Causali> adapter = new ArrayAdapter<Causali>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item);
                private Spinner spinCausali = (Spinner) findViewById(R.id.spinCausali);

                @Override
                protected Object doInBackground(Object... arg0) {
                        Service s = new Service();
                        try {
                                JSONArray jsonArray = new JSONArray(s.getCausali());
                                for(int i = 0; i < jsonArray.length(); i++) {
                                        adapter.add(new Causali(jsonArray.getJSONObject(i).getInt("id"), jsonArray.getJSONObject(i).getString("nome")));
                                }
                        } catch (ClientProtocolException e) {
                                e.printStackTrace();
                        } catch (IOException e) {
                                e.printStackTrace();
                        } catch (JSONException e) {
                                e.printStackTrace();
                        }
                        return null;
                }

                @Override
                protected void onPostExecute(Object result) {
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        spinCausali.setAdapter(adapter);
                        spinCausali.setSelection(Integer.parseInt(intent.getStringExtra("causale_id")));
                }
        }
       
}
come posso fare??

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Re:Aiuto su Spinner
« Risposta #1 il: 09 Dicembre 2012, 18:30:38 CET »
0
ho fatto un pò di prove, ma non riesco.
vi posto solo la classe che esegue la richiesta al server:
Codice: [Seleziona]
        private class AsyncConnection extends AsyncTask<Object, Object, Object> {
               
                private ArrayList<Causali> listCausali = new ArrayList<Causali>();
                private ArrayAdapter<Causali> adapter = null;
                private Spinner spinCausali = (Spinner) findViewById(R.id.spin_causali);

                @Override
                protected Object doInBackground(Object... arg0) {
                        Service s = new Service();
                        try {
                                JSONArray jsonArray = new JSONArray(s.getCausali());
                                for(int i = 0; i < jsonArray.length(); i++) {
                                        listCausali.add(new Causali(jsonArray.getJSONObject(i).getInt("id"), jsonArray.getJSONObject(i).getString("nome")));
                                }
                                adapter = new ArrayAdapter<Causali>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, listCausali);
                        } catch (ClientProtocolException e) {
                                e.printStackTrace();
                        } catch (IOException e) {
                                e.printStackTrace();
                        } catch (JSONException e) {
                                e.printStackTrace();
                        }
                        return null;
                }

                @Override
                protected void onPostExecute(Object result) {
                        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        spinCausali.setAdapter(adapter);
                        int tmpCausali = listCausali.indexOf(intent.getStringExtra("causale").toString());
                        spinCausali.setSelection(tmpCausali >= 0 ? tmpCausali : 0);
                }
        }
anche così non va.
per ora l'unica soluzione che mi è venuta in mente è quella di modificare la query che esegue il server remoto.