*

Hulp bij spinners
  1. Sponsors (verdwijnt wanneer je inlogt)

Weergegeven resultaten: 1 t/m 6 van 6

Discussie: Hulp bij spinners

  1. #1
    CCC
    CCC is offline

    Lid sinds
    4 January 2012
    Berichten
    3
    Toestel
    HTC Desire
    Androidversie
    InsertCoin 1.1.3

    Standaard Hulp bij spinners

    Hallo,

    Ik ben de laatste tijd een beetje bezig geweest met het programmeren van Android apps. Nu loop ik echter vast met twee spinners die ik in mn app heb zitten. Het is een simpele converter app die de opgegeven snelheid in verschillende eenheden kan uitdrukken (kph,mph,ms). Alleen heb ik geen idee hoe je kan verwijzen naar de items die in de string array staan van je spinners. Ik ben nogal een beginner in programmeren dus het kan zijn dat ik een hele domme vraag stel

    hier is de code:

    Code:
    package Android.development.learning;
    
    import Android.app.Activity;
    import Android.os.Bundle;
    import Android.view.View;
    import Android.widget.AdapterView;
    import Android.widget.AdapterView.OnItemSelectedListener;
    import Android.widget.ArrayAdapter;
    import Android.widget.Button;
    import Android.widget.EditText;
    import Android.widget.Spinner;
    import Android.widget.Toast;
    
    public class CarSpecConverter2Activity extends Activity {
        
        EditText editText1;
        Button button1;
        Spinner spinner1;
        Spinner spinner2;
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            editText1 = (EditText) findViewById (R.id.editText1);
            button1 = (Button) findViewById (R.id.button1);
            spinner1 = (Spinner) findViewById (R.id.spinner1);
            spinner2 = (Spinner) findViewById (R.id.spinner2);
            
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                    this, R.array.speed_array, Android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
            spinner1.setAdapter(adapter);
            
            ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
                    this, R.array.speed2_array, Android.R.layout.simple_spinner_item);
            adapter1.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
            spinner2.setAdapter(adapter1);
    
            spinner1.setOnItemSelectedListener(new MyOnItemSelectedListener());
            spinner2.setOnItemSelectedListener(new MyOnItemSelectedListener1());
        }  
           public void calculate(View view){
            if (view == button1){
                if ((????=="mph")==(????=="kph")) {
                float mph = Float.valueOf(editText1.getText().toString());
                float kph = (float) 1.6 * mph;
                Toast.makeText(this, mph + " mph is hetzelfde als " + kph + " kph.", Toast.LENGTH_LONG).show();
          
    }
            }
        }
    }
    Bij die ???? weet ik dus niet wat ik moet invullen om te kunnen verwijzen naar de items uit de spinners.

    En hier de MyOnItemSelectedList class (zijn er twee, zijn alleen precies hetzelfde):

    Code:
    package Android.development.learning;
    
    import Android.view.View;
    import Android.widget.AdapterView;
    import Android.widget.AdapterView.OnItemSelectedListener;
    
    public class MyOnItemSelectedListener implements OnItemSelectedListener {
    
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
    
        }
    
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
    
        }
    }
    strings.xml:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <string name="hello">Hello World, CarSpecConverter2Activity!</string>
        <string name="app_name">Car Spec Converter2</string>
    <string name="speed">number</string>
    <string-array name="speed_array">
        <item>mph</item>
        <item>kph</item>
        <item>ms</item>
    </string-array>
    <string name="speed2">number</string>
    <string-array name="speed2_array">
        <item>mph</item>
        <item>kph</item>
        <item>ms</item>
    </string-array>
    </resources>

    Alvast bedankt!

  2. #2

    Lid sinds
    13 July 2010
    Berichten
    1.426
    Toestel
    Google Galaxy Nexus
    Provider
    Vodafone
    Root
    Nee
    Androidversie
    4.0.4
    ROM
    AOSP/Yakju

    Standaard

    Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
    int position = spinner1.getSelectedItemPosition();

    Dan heb je de positie van het geselecteerde item. Is dat het zetje wat je nodig hebt of wil je er nog een?

    Ik kan je namelijk wel direct alle code geven, maar persoonlijk vind ik het leuker om een klein zetje te krijgen en de rest dan zelf werkend te krijgen.

  3. #3
    CCC
    CCC is offline

    Lid sinds
    4 January 2012
    Berichten
    3
    Toestel
    HTC Desire
    Androidversie
    InsertCoin 1.1.3

    Standaard

    Bedankt voor je snelle reactie!
    Ik kom er nog niet helemaal uit.. Ik neem aan dat

    int position = spinner1.getSelectedItemPosition();

    moet worden geschreven in de onItemSelected method, alleen dan herkent eclipse spinner1 niet, dus dan schrijf ik er Spinner spinner1; bij. En als ik

    Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);

    in mn MyOnItemSelectedListener class schrijf, moet ik een findViewById method aanmaken waardoor ik een beetje de kluts kwijt raak.. En ik weet ook niet precies wat ik nu ipv de ???? moet schrijven, als ik position schrijf, staat er dat het niet kan worden toegekend aan een variable terwijl int position dit toch zou moeten definieren?

  4. #4
    IvoJanssen's schermafbeelding

    Lid sinds
    25 February 2010
    Berichten
    279
    Toestel
    Nexus S
    Androidversie
    2.3.5

    Standaard

    Beste kun je aanwennen als je een variable vaker nodig hebt (bij onClicks ed), om dat bovenaan de klasse te zetten.

    Bovenaan de klasse:
    Code:
    private Spinner spinner1;
    in onCreate:
    Code:
    spinner1 = (Spinner) findViewById(R.id.spinner1);


    Daarna kun je overal die spinner1 gebruiken, ook in je onClick.

  5. #5

    Lid sinds
    13 July 2010
    Berichten
    1.426
    Toestel
    Google Galaxy Nexus
    Provider
    Vodafone
    Root
    Nee
    Androidversie
    4.0.4
    ROM
    AOSP/Yakju

    Standaard

    Citaat Oorspronkelijk geplaatst door CCC Bekijk bericht
    Bedankt voor je snelle reactie!
    Ik kom er nog niet helemaal uit.. Ik neem aan dat

    int position = spinner1.getSelectedItemPosition();

    moet worden geschreven in de onItemSelected method, alleen dan herkent eclipse spinner1 niet, dus dan schrijf ik er Spinner spinner1; bij. En als ik

    Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);

    in mn MyOnItemSelectedListener class schrijf, moet ik een findViewById method aanmaken waardoor ik een beetje de kluts kwijt raak.. En ik weet ook niet precies wat ik nu ipv de ???? moet schrijven, als ik position schrijf, staat er dat het niet kan worden toegekend aan een variable terwijl int position dit toch zou moeten definieren?
    Oke, dan zal ik het wat uitgebreider vertellen.

    Er zijn 2 dingen die je kan doen. In de methode onItemSelected wordt ook de nieuwe geselecteerde positie weergegeven. Dat is die integer die je bij de methode meekrijgt. Bij jou heet die arg2.
    Je kan zeggen: als de methdoe onItemSelected wordt aangeroepen dan wil ik dat een veld wordt geüpdate en dat daar de nieuwste waarde in staat.
    Wat ook kan: Zodra ik moet weten wat er in de spinner staat vraag ik dat op. In dat laatste geval heb je die onItemSelected methode helemaal niet nodig.

    Persoonlijk haal ik die data liever op als ik het nodig heb, dan weet ik in ieder geval zeker dat ik de laatste waarde heb. Wat zou er namelijk gebeuren als je nog niets hebt geselecteerd in die Spinner, dan wordt die methode misschien helemaal niet eens aangeroepen en klopt de waarde niet. Bovendien, als een gebruiker 10x de data in die spinner aanpast moet dat veld(wat je bij onItemSelected dan aanpast) ook 10x aangepast worden.


    Op het moment dat je die calculate methode aanroept moet je dus weten wat er in spinner1 en wat er in spinner2 staat. Dat kan je ook op 2 manieren doen. Je kan zeggen:
    - Aangezien de volgorde in die Array altijd hetzelfde is weet ik dat als de spinner op positie 0 zit, dat mph is geselecteerd. In zo'n geval kan je gewoon het positie(getal) gewoon gebruiken. Als je dan 'mph' veranderd in 'Mph' of 'M/h' dan hoef je verder in je code niets te veranderen.
    - Wat ook kan: Ik vraag de positie van die spinner op, en tegelijkertijd vraag ik op wat er op die positie in de array staat. Dit is waar je op dit moment mee bezig bent. Met deze code haal je de array op.
    Code:
    String[] speedArray = this.getResources().getStringArray(R.array.speed_array);
    Je kan dus nu zeggen, speedArray[position] geeft mij een waarde terug. Dat is of mph, kph, of ms. Dat ga ik vergelijken. Als je hier 'mph' veranderd naar 'MpH' dan moet je wel de code aanpassen. Maar hier moet je dan geen code aanpassen als je de volgorde van de lijst veranderd.

    Overigens: Strings moet je vergelijken met de string.equals(strings) methode, aangezien == niet altijd het juiste resultaat geeft. Meestal gaat dat wel goed, maar equals werkt altijd. Dit zorgt overigens ook voor 'hogere kwaliteit' code.
    Ook heb je aan 1 string-array in dit geval genoeg, omdat ze er exact hetzelfde zijn.

  6. #6
    CCC
    CCC is offline

    Lid sinds
    4 January 2012
    Berichten
    3
    Toestel
    HTC Desire
    Androidversie
    InsertCoin 1.1.3

    Standaard

    Oké, dus als ik deze code invul bij de onItemSelected method:

    Code:
    String[] speedArray = this.getResources().getStringArray(R.array.speed_array);
            int position = spinner1.getSelectedItemPosition();
    kun je met speedArray[position] verwijzen naar de waarde die in spinner1 is geselecteerd. Ik krijg alleen een rood kringeltje onder getResources, om dit op te lossen moet ik een aparte method aanmaken, waarom? En als ik hetzelfde stuk code van hierboven invul in mn MainActivity gebeurt dit niet. Ik krijg het idee dat alles niet echt klopt met elkaar doordat ik 3 verschillende classes heb (MainActivity, MyOnItemSelectedListener, MyOnItemSelectedListener1), of moet dit gewoon kunnen kloppen?

Soortgelijke discussies

  1. Hulp bij Programeren
    Door AndroidGeert in forum Android Development
    Reacties: 6
    Laatste bericht: 10 January 2012, 09:56
  2. applicatie hulp
    Door daniel55 in forum Android Development
    Reacties: 7
    Laatste bericht: 29 August 2011, 09:22
  3. Hulp bij link2sd
    Door SakasakaHeyhey in forum Android Applicaties
    Reacties: 7
    Laatste bericht: 16 August 2011, 16:33
  4. Hulp met flashen SGS
    Door Flozzo in forum Rooten, Custom Roms en updates
    Reacties: 1
    Laatste bericht: 4 December 2010, 13:39
  5. Uw Hulp in Huis!
    Door Sorbo in forum Stel jezelf voor
    Reacties: 1
    Laatste bericht: 17 July 2010, 08:46

Regels voor berichten

  • Je mag geen nieuwe discussies starten
  • Je mag niet reageren op berichten
  • Je mag geen bijlagen versturen
  • Je mag niet je berichten bewerken
  •