交换旋转器

时间:2016-09-01 05:54:24

标签: android android-spinner android-adapter

我的应用程序包含两个微调器和一个按钮,我从每个微调器中选择了每个值,后来我使用按钮单击交换了微调器适配器,当修改微调器适配器时,默认情况下结果表示初始值,无论什么我给过的价值观。

这就是我 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>

在交换之前选择值 before swapping

交换后

微调 after swapping

我需要在交换微调器之后显示选定值

2 个答案:

答案 0 :(得分:1)

使用它可以解决您的问题。

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来交换它们的值.....

答案 1 :(得分:0)

To add some explaination to the accepted answer; setting the adapter resets the spinner to the first item of its list (because it inflates the list all over again), therefore you have to manually save the selected item and restore it after swapping the adapters.