Android减少或增加Spinner中的选择位置

时间:2017-05-30 11:17:22

标签: android spinner

在我的Android应用程序中,我有一个带项目的Spinner,如:(1,2)(3,4)..(71,72)。 当我从那个Spinner中选择一个Item然后我得到eg。 (67,68)在那里。 现在我想以编程方式将所选项目更改为(65,66)或更改为 (69,70)点击一个或另一个textView。 也就是说,我希望通过单击两个textView来减少或增加String Array中的选择位置,如下所示:

'<< SelectedItem>> '。

为此,我可以使用setSelection(position)。

我的应用程序可以通过使用getSelectedItemPosition来了解到目前为止选择了哪个项目。

getSelectedItemPosition返回一个整数。所以,例如。如果我减小该整数并使用它运行setSelection(position),则SelectedItem将更改为该数组中的上一项。

因此,为了实现这一点,我必须将整数添加到'position_variable', 然后用1减少该变量,并使用该值运行setSelection(position_variable)。

程序必须验证位置0或最大值是否不超过/超出界限。

我怎样才能在Java中实现这一目标?我正在Android Studio中开发我的应用程序。

在activity_main.xml中我有以下内容:

        <TextView
            android:id="@+id/forward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/ora_keltezese"
            android:layout_marginStart="5dp"
            android:layout_marginTop="5dp"
            android:layout_toEndOf="@id/orarend"
            android:text="@string/forward"
            android:textSize="20sp"
            android:onClick="increaseSpinnerItemPosition"/>

        <TextView
            android:id="@+id/backward"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/ora_keltezese"
            android:layout_marginStart="5dp"
            android:layout_marginTop="5dp"
            android:text="@string/backward"
            android:textSize="20sp"
            android:onClick="decreaseSpinnerItemPosition"/>

在MainActivity.java中,我有以下几点:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Spinner spinner = (Spinner) findViewById(R.id.orarend);
        //Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.TanitasiNapok, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        spinner.setAdapter(adapter);


        Spinner spinner2 = (Spinner) findViewById(R.id.blokkora);
        //Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,
                R.array.BlokkoraSorszama, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        spinner2.setAdapter(adapter2);


        Spinner spinner3 = (Spinner) findViewById(R.id.osztaly);
        //Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(this,
                R.array.OsztalyKivalasztasa, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // Apply the adapter to the spinner
        spinner3.setAdapter(adapter3);

        }

    public void decreaseSpinnerItemPosition (View v) {
        //What to put here?
    }

    public void increaseSpinnerItemPosition (View v) {
        //What to put here?
    }
}

那么如何在我的应用程序中实现position_variable呢? 我怎样才能实现目标?

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

public void decreaseSpinnerItemPosition (View v) {
    spinner3.setSelection(Math.max(0, spinner3.getSelectedItemPosition() - 1));
}

public void increaseSpinnerItemPosition (View v) {
   spinner3.setSelection(Math.min(getResources().getStringArray(R.array.OsztalyKivalasztasa).length - 1, spinner3.getSelectedItemPosition() + 1));
}

Math.max(x, y)返回更多的x和y。因此,如果x为1且y为2,则返回2.我们在此使用它不低于0.因此,如果spinner3.getSelectedItemPosition() - 1小于(或等于)0,Math.max(0, spinner3.getSelectedItemPosition() - 1)将返回0。 与Math.min相同,但在这种情况下,我们检查上限值(取决于数组的大小)。 您也可以输入

if(spinner3.getSelectedItemPosition() - 1 <= 0) {
    spinner3.setSelection(0);
} else {
    spinner3.setSelection(spinner3.getSelectedItemPosition() - 1);
}

会是一样的。

别忘了全局定义你的spinner3:

public class MainActivity extends AppCompatActivity {

    private Spinner spinner3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    [...]
    spinner3 = (Spinner) findViewById(R.id.osztaly);
    [...]
    }
}