交换纺纱厂

Swapping of Spinners

我的应用程序由两个微调器和一个按钮组成,我从每个微调器中选择了每个值,后来我使用按钮单击交换了微调器适配器,当微调器适配器被修改时,结果默认代表初始值,没有不管我给过什么价值观。

这就是我的 MainActivity 的样子

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

这就是我的 activity_main 的样子

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

这就是我的 strings.xml 的样子

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

选择值,交换微调器之前

旋转器交换后

我需要在交换微调器

后显示选择的值

用这个解决你的问题。

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

注意:-使用int position来交换它们的值.....

为已接受的答案添加一些解释;设置适配器会将微调器重置为其列表的第一项(因为它会再次膨胀列表),因此您必须手动保存所选项目并在交换适配器后将其恢复。