web-dev-qa-db-ja.com

値変更のスピナー

私のシステムには2つのスピナーがあります。次に、最初のスピナーの値に応じて、2番目のスピナーの選択値を変更する必要があります。ユーザーが最初のスピナーの値を変更するとすぐに、2番目のスピナーの値は、最初のスピナーの選択値に応じて自動的に設定されます。これを実装するには?

19
dev_android

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を作成し、それを最初のスピナーにアタッチする必要があります。

18
I82Much

最初のスピナーの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);
                    }

        }

    }    
4
arraystack

スピナーごとに個別に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
        }
    });
1
sisir