私のシステムには2つのスピナーがあります。次に、最初のスピナーの値に応じて、2番目のスピナーの選択値を変更する必要があります。ユーザーが最初のスピナーの値を変更するとすぐに、2番目のスピナーの値は、最初のスピナーの選択値に応じて自動的に設定されます。これを実装するには?
Hello Spinner チュートリアルから:
次に、AdapterView.OnItemSelectedListenerを実装するネストされたクラスを作成します。これにより、Spinnerからアイテムが選択されたときにアプリケーションに通知するコールバックメソッドが提供されます。このクラスは次のようになります。
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
Toast.makeText(parent.getContext(), "The planet is " +
parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
AdapterView.OnItemSelectedListenerには、onItemSelected()およびonNothingSelected()コールバックメソッドが必要です。前者は、AdapterViewから項目が選択されたときに呼び出されます。その場合、短いトーストメッセージが選択されたテキストを表示します。後者は、選択がAdapterViewから消えたときに呼び出されますが、この場合は発生しないため、無視されます。次に、MyOnItemSelectedListenerをSpinnerに適用する必要があります。 onCreate()メソッドに戻り、次の行を最後に追加します。spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
つまり、2番目のスピナーの値を変更するOnItemSelectedListenerを作成し、それを最初のスピナーにアタッチする必要があります。
最初のスピナーのonItemSelectedに条件を設定する必要があります。この例では、1番目のスピナーに応じて2番目のスピナーの値を取得できます。
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
if(arg0.equals(spin0)){
spin1.setClickable(true);
if(spin0.getSelectedItem().equals("India"))
{
ArrayAdapter <String> s1 = new ArrayAdapter <String> (this,Android.R.layout.simple_spinner_item,states_india);
s1.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s1);
}
else if(spin0.getSelectedItem().equals("Pakistan"))
{
ArrayAdapter <String> s2 = new ArrayAdapter <String> (this,Android.R.layout.simple_spinner_item,states_pak);
s2.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s2);
}
else if(spin0.getSelectedItem().equals("China"))
{
ArrayAdapter <String> s3 = new ArrayAdapter <String> (this,Android.R.layout.simple_spinner_item,states_china);
s3.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(s3);
}
}
}
スピナーごとに個別にonItemSelected()を定義する必要があります。そうでない場合、いずれかのスピナーから何かが選択された場合にコードが実行されます。
newCategory.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
String selCat = newCategory.getItemAtPosition(arg2).toString();
if (selCat != "New")
{
loadSpinnerData(topic);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
newTopic.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
loadSpinnerData()
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});