2016-09-01 3 views
0

Meine App besteht aus zwei Spinner und einer Schaltfläche, ich habe jeden Wert aus jedem Spinner ausgewählt, später hatte ich die Spinner-Adapter per Knopfklick ausgetauscht, wenn Spinner-Adapter geändert werden, das Ergebnis stellt standardmäßig die Anfangswerte dar, egal welche Werte ich je gegeben habe.Austauschen der Spinner

Dies ist, wie mein MainActivity wie

public class MainActivity extends AppCompatActivity { 

private Spinner alphabets, numbers; 
private Button swapSpinners; 
private ArrayAdapter<CharSequence> alphabetsAdapter, numbersAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    alphabets = (Spinner) findViewById(R.id.alphabets); 
    numbers = (Spinner) findViewById(R.id.numbers); 
    swapSpinners = (Button) findViewById(R.id.swapSpinner); 


    alphabetsAdapter = ArrayAdapter.createFromResource(this, 
      R.array.alphabets, android.R.layout.simple_spinner_item); 
    alphabetsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    alphabets.setAdapter(alphabetsAdapter); 

    numbersAdapter = ArrayAdapter.createFromResource(this, 
      R.array.numbers, android.R.layout.simple_spinner_item); 
    numbersAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    numbers.setAdapter(numbersAdapter); 

    swapSpinners.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (alphabets.getAdapter().equals(alphabetsAdapter)) { 
       alphabets.setAdapter(numbersAdapter); 
       numbers.setAdapter(alphabetsAdapter); 
      } else { 
       alphabets.setAdapter(alphabetsAdapter); 
       numbers.setAdapter(numbersAdapter); 
      } 
     } 
    });} 
} 

sieht Dies ist, wie mein activity_main wie

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="karthik.spinnerswap.MainActivity"> 

<Spinner 
    android:id="@+id/alphabets" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
<Button 
    android:id="@+id/swapSpinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/alphabets" 
    android:text="Swap Spinners" /> 
<Spinner 
    android:id="@+id/numbers" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/swapSpinner" /> 
    </RelativeLayout> 

sieht Dies ist, wie mein strings.xml wie

sieht
<resources> 
<string name="app_name">SpinnerSwap</string> 

<string-array name="alphabets"> 
    <item>A</item> 
    <item>B</item> 
    <item>C</item> 
    <item>D</item> 
    <item>E</item> 
    <item>F</item> 
    <item>G</item> 
    <item>H</item> 
    <item>I</item> 
    <item>J</item> 
</string-array> 

<string-array name="numbers"> 
    <item>0</item> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
    <item>4</item> 
    <item>5</item> 
    <item>6</item> 
    <item>7</item> 
    <item>8</item> 
    <item>9</item> 
</string-array> 

Auswahl von Werten, vor nach Swapping after swapping

die Spinner before swapping

Spinnern tauschen muss ich die ausgewählten Werte nach tauschen die Spinner zeigen

Antwort

1

Verwenden Sie dies, um Ihr Problem zu lösen.

swapSpinners.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int positionSpinner1 = alphabets.getSelectedItemPosition() ; 
      int positionSpinner2 = numbers.getSelectedItemPosition() ; 
      if (alphabets.getAdapter().equals(alphabetsAdapter)) { 
      alphabets.setAdapter(numbersAdapter); 
      numbers.setAdapter(alphabetsAdapter); 
      } else { 
      alphabets.setAdapter(alphabetsAdapter); 
      numbers.setAdapter(numbersAdapter); 
      } 
      alphabets.setSelection(positionSpinner2); 
      numbers.setSelection(positionSpinner1); 
     } 
    }); 

Hinweis: -Use int Lage, ihre Werte zu vertauschen .....

+0

Danke @sushildlh, Ihr Code funktioniert wie ein Charme :) – Karthik

+0

Sie sind herzlich willkommen ..... :) – sushildlh

0

Um etwas explaination auf die akzeptierte Antwort hinzuzufügen; Wenn Sie den Adapter setzen, wird der Spinner auf den ersten Eintrag seiner Liste zurückgesetzt (weil er die Liste erneut aufbläht). Daher müssen Sie den ausgewählten Eintrag manuell speichern und nach dem Austauschen der Adapter wiederherstellen.