Mit Spinner ein neues Layout aufrufen?

Shila

Shila

Neues Mitglied
0
Huhu,

ich bin neu hier und hoffe ich hab den richtigen Bereich gefunden.
Und zwar hab ich ein winziges Problem und will überhaupt wissen ob das geht. Ich hab in meiner App einen Spinner eingebaut bei dem man die Schwierigkeit auswählen kann. Und je nachdem wo der Spinner steht, soll sich das Layout wechseln, bzw vereinfacht nur ein Textview ändern.
Hab es soweit das ich mein Adapter schon zusammengebaut hab, und auch die if-Bedingungen. Hab um zu testen in jede If (sind 3) ein Log.d eingebaut um zu schauen ob der überhaupt in die Abfragen kommt.
Fakt ist, er kommt rein, gibt mir die Logs richtig aus, doch sobald ich ein
setContentView (R.layout.blah) eingebe ändert sich nichts. Obwohl das layout vorhanden ist. Auch mit einem beliebigen TextView ändert er mir den Text nicht.

Jetzt ist die Frage, geht das überhaupt mit einem Spinner? Und wenn ja wie? D:

Vielen Dank für eure Antworten.
Falls ihr den Code braucht, meldet euch. ( Weiß nicht ob das Pflicht ist)

Achja, ich arbeite mit Eclipse. D:
 
Hallo Shila!
Erstmal herzlich willkommen!

Zeig doch mal den Code dann sollten wir schon rausfinden, wo es hapert.
 
Okay, moment muss nur wieder den alten Code herstellen da ich relativ viel rumprobiert hab :D

public class ChallengeSomeoneNew extends Activity {


Code:
TextView differentContent;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        
        setContentView(R.layout.challenge_someone);
        setUpSpinner();
        
    }
    
     private void setUpSpinner ()
     {
         final Spinner spinner = (Spinner) findViewById(R.id.difficultSpinner);
         ArrayAdapter<CharSequence> adapter =  ArrayAdapter.createFromResource(this,R.array.difficulty,  android.R.layout.simple_spinner_item);
         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         spinner.setAdapter(adapter);
         
         spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                
             
             public void onItemSelected(AdapterView<?> parent, View view, 
                        int position, long id) {
                    // An item was selected. You can retrieve the selected item using
                    // parent.getItemAtPosition(position)
                
            String blah = spinner.getSelectedItem().toString();
            
        Log.d("spinnerklick", blah );
        if ( spinner.getSelectedItem().toString() == "easy" )
        {
            
            setContentView(R.layout.challenge_someone_easy);
            //changeTextViewEasy();
            Log.d("spinnerklick","easy");
        }
        if ( spinner.getSelectedItem().toString() == "middle" )
        {
            setContentView(R.layout.challenge_someone_middle);
            //changeTextViewMiddle();
            Log.d("spinnerklick","middle");
        }
        if ( spinner.getSelectedItem().toString() == "hard" )
        {
            //changeTextViewHard();
            setContentView(R.layout.challenge_someone_hard);

            Log.d("spinnerklick","hard");
        }
                
         } 
             
            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
                
            } 
         
     
         
     });    
        
     
         
}
okay, minimal unübersichtlich o.O
brauchst du die layouts auch noch? Sehen eigentlich alle gleich aus, bis auf eben ein textview das sich ändert.

lg Shila
 
Soweit alles ganz gut. Allerdings kannst du Strings nicht mit
Code:
==
vergleichen.
Das geht nur mit
Code:
equals()

Statt
Code:
if ( spinner.getSelectedItem().toString() == "easy" )
        {
            
            setContentView(R.layout.challenge_someone_easy);
            //changeTextViewEasy();
            Log.d("spinnerklick","easy");
        }
Musst du also zum Vergleichen das hier benutzen:
Code:
i
f ( spinner.getSelectedItem().toString().equals("easy"))
        {
            
            setContentView(R.layout.challenge_someone_easy);
            //changeTextViewEasy();
            Log.d("spinnerklick","easy");
        }

Alternativ kannst du auch mit
Code:
getSelectedItemPosition()
die Position im Spinner bekommen und dann anhand von 0,1 und 2 das entsprechende Layout setzen.
 
Naja er gibt mir aber die log dateien aus, also ist kommt er in die einzelnen fälle rein, werde das gleich mal ausprobieren ob das an dem lag.
chonmal danke ;)
 
Du kannst also den Eintrag 'middle' auswählen und siehts das dann im Logcat?
Ich hab das ganze mal grob nachgebaut und bei mir wird ohne Probleme das neue Layout angezeigt. Wie sehen die Layouts aus? Eins reicht als Beispiel
 
Wir sind einfach total dumm, wir machen schon so lange Android, und haben vercheckt das man das mit equals vergleicht, dadurch das er die log angezeigt hat war das so unlogisch aber es geht jetzt!!! :D

vielen vielen dank :D
das hat uns echt viel weiter geholfen!! :)



edit:
Hab jetzt doch noch ein problem, hatte jetzt das geändert mit dem equal, und zwar nur bei einem, da ging es wunderbar, hab das jetzt bei allen drei fällen ausgebessert und jetzt gibt er mir nur das layout vom ersten fall und vom 2. den ich angewählt habe, allerdings wenn ich jetzt wieder ändern möchte dann geht es nicht mehr, dann bleibt der 2.
 
Zuletzt bearbeitet:
Komisch, bei mir ging es auch mit
Code:
==
:D
 
Naja, hab es jetzt, vielen dank für deine Hilfe :)
 
Wenn du wieder zurück willst musst du auch die Listener neu setzen. Sobald setContentView aufgerufen wird sind die alten Listener nicht mehr aktiv
 

Ähnliche Themen

Helmut1A
  • Helmut1A
Antworten
7
Aufrufe
1.126
Helmut1A
Helmut1A
D
  • Data2006
Antworten
14
Aufrufe
484
jogimuc
J
L
Antworten
4
Aufrufe
1.332
lonnie9020
L
Zurück
Oben Unten