2016-05-29 23 views
0

私はスピナー2を持っています。スピナー2には曜日と曜日があり、ユーザーが曜日を選択すると、s1とs2にはそれぞれ時間と分が表示されます。ダイナミックスピナーが正しく動作しない

アクティビティの起動時に、毎日選択しています。 問題は私が毎日の乾杯を続けていることです。それは、それが無限に選ばれることを示唆した。また、私はs1とs2の値を選択できません。これを解決するには?

public class try_spinner extends Activity implements AdapterView.OnItemSelectedListener { 
Spinner spinner1, spinner2, s1, s2, s3; 
String app_name, room_name; 
TextView app, room; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.try_spinner); 

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 

int width = dm.widthPixels; 
int height = dm.heightPixels; 

getWindow().setLayout((int) (width * .9), (int) (height * .7)); 

Bundle extras = getIntent().getExtras(); 
final String app_string = extras.getString("APPLIANCE_NAME"); 
final String room_string = extras.getString("APPLIANCE_ROOM"); 

app = (TextView) findViewById(R.id.app_name); 
app.setText(app_string); 
room = (TextView) findViewById(R.id.room_name); 
room.setText(room_string); 

spinner1 = (Spinner) findViewById(R.id.spinner1); 
spinner1.setOnItemSelectedListener(this); 

spinner2 = (Spinner) findViewById(R.id.spinner2); 
s1 = (Spinner) findViewById(R.id.s1); 
s2 = (Spinner) findViewById(R.id.s2); 
s3 = (Spinner) findViewById(R.id.s3); 
spinner2.setOnItemSelectedListener(this); 
s1.setOnItemSelectedListener(this); 
s2.setOnItemSelectedListener(this); 
s3.setOnItemSelectedListener(this); 

if (app_string.equals("Lighting")) { 
    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.lighting)); 
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter2.notifyDataSetChanged(); 
    spinner1.setAdapter(dataAdapter2); 
} else if (app_string.equals("Shower Heater")) { 
    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.shower_heater)); 
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter2.notifyDataSetChanged(); 
    spinner1.setAdapter(dataAdapter2); 
} else { 
    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.empty)); 
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter2.notifyDataSetChanged(); 
    spinner1.setAdapter(dataAdapter2); 
} 

} 


@Override 
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
         long arg3) { 
// TODO Auto-generated method stub 
String txt_spinner2 = String.valueOf(spinner2.getSelectedItem()); 
Toast.makeText(this, txt_spinner2, Toast.LENGTH_SHORT).show(); 
if (txt_spinner2.contentEquals("Daily")) { 
    List<String> list = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.days)); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter.notifyDataSetChanged(); 
    s1.setAdapter(dataAdapter); 
    String txt_s1 = String.valueOf(s1.getSelectedItem()); 

    //set for daily hours usage 
    List<String> list3 = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter3 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.hours)); 
    dataAdapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter3.notifyDataSetChanged(); 
    s2.setAdapter(dataAdapter3); 

    //set for daily minutes usage 
    List<String> list4 = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter4 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.hours)); 
    dataAdapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter4.notifyDataSetChanged(); 
    s2.setAdapter(dataAdapter4); 

    //set for daily empty thrd space 
    List<String> list5 = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter5 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.empty)); 
    dataAdapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter5.notifyDataSetChanged(); 
    s3.setAdapter(dataAdapter5); 
} 

else if (txt_spinner2.contentEquals("Monthly")) { 
    List<String> list = new ArrayList<String>(); 
    list.add("Conveyance");//you should add items from db here(2nd spinner) 
    list.add("the end"); 
    ArrayAdapter<String> dataAdapter6 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, list); 
    dataAdapter6.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter6.notifyDataSetChanged(); 
    s3.setAdapter(dataAdapter6); 
} 

} 
+0

私はあなたのコードから得たものは、あなたが 'spinner1'に値を与えていることですが、クリックすると' spinner2'からアイテムを取り出しています。何故ですか? – Aradhna

+0

spinner1とspinner2の両方に初期値が設定されていますが、s1、s2、s3は最初は空です。 スピナー1は、ヒーターや照明などのテキストビュータイトル内のテキストに応じて設定されます。 spinner2は、ユーザーが毎日または毎月を選択する動的なもので、s1、s2、s3は毎月または毎日の(時、分、分)の値に設定されます。問題は動的ですspinner2により、s1、s2、s3が選択できなくなります。 (spinner2.getSelectedItem())の直後に数多くのトースト(「毎日」)を得て証明された、スピナーs1、s2、s3をリフレッシュし続けます。 ' – whoami

答えて

1

まず最初に、スピナーにアダプタを設定してから、setOnItemSelectedListener()を呼び出します。スピナーの値が初期化されると、setOnItemSelectedListenerメソッドを呼び出すことさえできます。デバッガを入れてチェックすることができます。

第二に、常にそのスピナーをチェックしたり、あなたがそうあなたのコードを変更し、その作業かどうかを参照してください。この

public void onItemSelected(AdapterView<?> parent, View view, int position, 
           long id) { 

    Spinner clickedSpinner = (Spinner) parent; 

    switch (clickedSpinner.getId()) { 
     case R.id.spinner1: 
      // your code for spinner1 
      String str = spinner1.getSelectedItem().toString(); 
      break; 
    } 
} 

のように行うことができますスピナーのためのあなたのケースでは、イベントを取得しているウィジェット。それがあなたを助けてくれることを願っています...

+0

' Spinner clickedSpinner =(Spinner)parent; 'この行は、スピナーを親として設定して、その下の子の値を決定することを意味しますか? – whoami

+0

@whoami noそれはスピナーにキャスティングビューです。 Adapterviewは抽象的な親クラスのようなものなので、特定の子クラスにキャストすることができます。この場合、スピナーに流し込まれる。 – androidnoobdev

+0

私はそれが今働いたと思う。もう1つの質問。ボタンをクリックすると、スピナーの値が取得されます。 itemselectedクラスの値にどのようにアクセスできますか? – whoami

関連する問題