2017-05-30 94 views
0

在我的Android應用程序中,我有一個帶有Items的Spinner,如:(1,2)(3,4)..(71,72)。 當我從那個微調選擇一個項目,然後我得到例如。 (67,68)在那裏。 現在我想通過點擊一個或另一個textView以編程方式將所選項目更改爲(65,66)或 (69,70)。 也就是說,我想通過點擊這兩個textViews,這樣來減少或增加在字符串數組中選擇位置:Android減少或增加Spinner中的選擇位置

「< <的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? 我該如何實現我的目標?

回答

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. 與數學相同.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); 
    [...] 
    } 
} 
+0

哇,它的作品!其實我正在減少或增加spinner2。所以我相應地修改了你的命令。只是不明白我做了什麼? – PalCsanyi

+0

我編輯了我的答案,並簡化了增加和減少方法。 – Prexx

+0

非常感謝您的幫助! – PalCsanyi