選択した項目によって別のスピナーからスピナーを更新しようとしています。次のコードブロックは、私がどのようにしたのかを示しています。別のスピナーの選択項目に基づいてスピナー項目を更新します。
ontainemSelected()メソッド内のifステートメントを使用して、spinner3を正常に更新できました。しかし、私の問題は、ループがちょうど "自動的に値" 5 "を選択しているようだということです。spinner2(Toastは"あなたが5を選択しました ")。
アクティビティが読み込まれると、Toastは3つのスピナーのそれぞれの選択を表示します。アダプターがスピナーに設定されているときに、各スピナーの最初の選択が行われることを意味しますか?
また、adapter3をspinner3にバインドすると(if文で)、spinner2の新しい選択がトリガーされますか?
ありがとうございます!
public class WheelchairHelperMain extends Activity{
Spinner spinner2;
Spinner spinner3;
ArrayAdapter<CharSequence> adapter3 ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wheelchair_helper_main);
Spinner spinner1 = (Spinner)findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this, R.array.destinations_list, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);
spinner1.setOnItemSelectedListener(new MyOnItemSelectedListener());
spinner2 = (Spinner)findViewById(R.id.spinner2);
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,R.array.departure_timeH_list,android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter2);
spinner2.setOnItemSelectedListener(new MyOnItemSelectedListener());
spinner3 = (Spinner)findViewById(R.id.spinner3);
spinner3.setOnItemSelectedListener(new MyOnItemSelectedListener());
}
public class MyOnItemSelectedListener implements OnItemSelectedListener{
public void onItemSelected(AdapterView<?> parent, View v, int pos,long id) {
// TODO Auto-generated method stub
//use the selected station and departure time to calculate the required time
Toast toast = Toast.makeText(parent.getContext(),"You've chosen: " + parent.getItemAtPosition(pos), 2);
toast.show();
if (spinner2.getSelectedItem().equals("5")){
adapter3 = ArrayAdapter.createFromResource(WheelchairHelperMain.this,R.array.departure_timeH5M_list, android.R.layout.simple_spinner_item);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3.setAdapter(adapter3);
Log.v("spinner2","5");
}else if(spinner2.getSelectedItem().equals("6")){
adapter3 = ArrayAdapter.createFromResource(WheelchairHelperMain.this,R.array.departure_timeH6M_list, android.R.layout.simple_spinner_item);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3.setAdapter(adapter3);
Log.v("spinner2","6");
}
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
}
以下はxmlファイルです。 これはspinner2のための文字列の配列である:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="departure_timeH_prompt">何時?</string>
<string-array name="departure_timeH_list">
<item>5</item>
<item>6</item>
<item> 7 </item>
<item> 8 </item>
<item> 9 </item>
<item> 10 </item>
<item> 11 </item>
<item> 12 </item>
<item> 13 </item>
<item> 14 </item>
<item> 15 </item>
<item> 16 </item>
<item> 17 </item>
<item> 18 </item>
<item> 19 </item>
<item> 20 </item>
<item> 21 </item>
<item> 22 </item>
<item> 23 </item>
<item> 24 </item>
<item> 0 </item>
</string-array>
</resources>
spinner3ための文字列の配列:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="departure_timeM_prompt">何分?</string>
<string-array name="departure_timeH5M_list">
<item> 5 </item>
<item> 24 </item>
<item> 38 </item>
<item> 52 </item>
</string-array>
<string-array name="departure_timeH6M_list">
<item> 01 </item>
<item> 08 </item>
<item> 17 </item>
<item> 25 </item>
<item> 34 </item>
<item> 41 </item>
<item> 47 </item>
<item> 57 </item>
</string-array>
</resources>
私はちょうど私の問題を発見しました。元のコードで
:
spinner3.setAdapter(adapter3);
はonItemSelectedListener
内部と呼ばれています。アダプタをAdapterView
に設定すると、アダプタの最初の項目が自動的に1回選択されます。したがって、リスナーが再びトリガーされます。
そして、選択肢がspinner2から来ているかどうかを区別するフラグを設定していないので、spinner3.setAdapter(adapter3)
を入れても、「選択された項目が5であるかどうかをチェックする」ということになります。
ので、元のコードでは、次のフラグを挿入することは私の作品:
if (parent.getId()==2131165201){
//code to check selected item and define new adapter3 for spinner3
お役に立てば幸いですか私は最初に新しい文字列配列(XMLファイル)をアダプタにバインドし、notifyDataSetChanged()を呼び出すことでこれを試しました。しかし、何も起こらなかった。データの変更はプログラムで行う必要がありますか? – Bao