2016-05-23 6 views
0

私の友人(Java/Androidアプリの学習中)の顧客向けに、特定の製品の価格を選択する一連のスピナーを使用できるアプリを作成しています。他のスピナーが変更されたときにスピナーを選択する

私はスピナーで現時点でちょっと立ち往生していますが、最終的にはどういったものがまとまっているのか、私は以前のスピナーの選択に基づいてスピナーのオプションを設定するコードを作成しました。

これは、別のスピナーで選択されるまで機能します。例えば。 スピナー1で "single speed"を選択した場合、 スピナー2で "4"が選択され、スピナー3で "フック"が選択された場合、 スピナー2がリセットされます。

別のスピナーが選択されたら、ダイナミックスピナーのリセットを停止するにはどうすればよいですか?

最終的には、さまざまな選択肢によってどのオプションを使用できるかが決まるため、すべてのスピナーを動的に構築します。

ありがとうございます。 (驚くほど書かれていないことを喜ばしく思っています。

public class priceList extends Activity implements AdapterView.OnItemSelectedListener{ 

    Spinner capacity; 
    Spinner speed; 
    Spinner hoistSpeed; 
    Spinner type; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_price_list); 


     //Spinner for Capacity 
     capacity = (Spinner) findViewById(R.id.capacityTextView); 
     ArrayAdapter adapterCapa=ArrayAdapter.createFromResource(this,R.array.arrayCapacity, android.R.layout.simple_spinner_item); 
     capacity.setAdapter(adapterCapa); 
     capacity.setOnItemSelectedListener(this); 

     //Spinner for the Speed 
     speed = (Spinner) findViewById(R.id.speedTextView); 
     ArrayAdapter adapterSpd = ArrayAdapter.createFromResource(this,R.array.arraySpeed, android.R.layout.simple_spinner_item); 
     speed.setAdapter(adapterSpd); 
     speed.setOnItemSelectedListener(this); 


     //Spinner for the type 
     type = (Spinner) findViewById(R.id.typeTextView); 
     ArrayAdapter adapterBeam=ArrayAdapter.createFromResource(this,R.array.arrayType, android.R.layout.simple_spinner_item); 
     type.setAdapter(adapterBeam); 
     type.setOnItemSelectedListener(this); 

    } 

    @Override 
    public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) { 

     //TextView myText = (TextView) view; 
     //Toast.makeText(this, myText.getText(), Toast.LENGTH_SHORT).show(); 


     hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView); 
     ArrayAdapter adapterTypeA=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedSingle, android.R.layout.simple_spinner_item); 
     hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView); 
     ArrayAdapter adapterTypeB=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedDouble, android.R.layout.simple_spinner_item); 

     if(speed.getSelectedItem().toString().equals("Single Speed")) 
     { 

      hoistSpeed.setAdapter(adapterTypeA); 

     } 

     else if(speed.getSelectedItem().toString().equals("Dual Speed")) 
     { 

      hoistSpeed.setAdapter(adapterTypeB); 

     } 

     } 
    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 

} 
+0

https://github.com/henrychuangtw/ReuseSpinner – HenryChuang

答えて

1

あなたの質問は非常に混乱して、おそらくあなたは

を言い換えることができますしかし、あなただけの制御または設定あなたの次のスピナーをあなたの現在のスピナーで選択されているものに基づいて、及び適切にあなたのチェックを行うことができます。

ロジックを互いに分離するために、setOnItemSelectedListenerを直接記述することができます。

String[] speedArr = getResources().getStringArray(R.array.arraySpeed); 

    speed.setAdapter(adapter); 
      speed.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

       @Override 
       public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 
        //Do your checks here, and set the next spinner, or reset the previous one. 

       //This automatically gets your selected value, so no need doing an if else check here again 
       String selectedValue = speedArr[position]; 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> arg0) { 
        // TODO Auto-generated method stub 

       } 
      }); 
+0

お返事ありがとうございました。混乱させて申し訳ありません。次のスピナーの選択は、3番目のスピナーが選択され、何らかの理由で2番目のスピナーがリセットされたときに正常に動作する以前のスピナーの選択から決定されます。それは理にかなっていますか。私は私の質問を編集しますが、いくつかのコンマは役に立ちました。 –

+0

ええ、各スピナーのsetOnItemSelectedListenerを分離すると、コードロジックが別に配置されるため、2番目のスピナーのリセット問題が解決されます。このコードを再利用してください –

+0

ありがとう、ありがとう+ Html Tosin、私はそれを行っていきます。 –

関連する問題