2016-05-16 9 views
0

私は1つのAndroidアクティビティにSpinner要素を持っています。itemSelectedの後に新しいSpinnerを動的に作成するにはどうすればよいですか?

私は、このSpinnerのItemを選択した場合、新しいSpinnerを作成してそれを私の活動に入れることができます。私はこの第二のスピナーの1つの項目を選択した場合、私は新しいスピナーを作成することができるはずです....

ので、これはコードです:

public Dialog onCreateDialog(Bundle savedInstanceState) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     v = getActivity().getLayoutInflater().inflate(R.layout.alert_insert_dialog, null); 
     builder.setView(v); 
     builder.setTitle("Insert Alerts"); 
     builder.setCancelable(false); 

     listValueSet_Agent = new ArrayList<AlertValueSet>(); 
     valueSet = new AlertValueSet("2.16.840.1.113883.1.11.20.4","106190000", 
       "2.16.840.1.113883.6.96","Penicillin","SNOMED CT"); 
     listValueSet_Agent.add(valueSet); 
     valueSet = new AlertValueSet("2.16.840.1.113883.1.11.20.4","281647001", 
       "2.16.840.1.113883.6.96","Aspirin","SNOMED CT"); 
     listValueSet_Agent.add(valueSet); 
     valueSet = new AlertValueSet("2.16.840.1.113883.1.11.20.4","282100009", 
       "2.16.840.1.113883.6.96","Codeine","SNOMED CT"); 
     listValueSet_Agent.add(valueSet); 
     valueSet = new AlertValueSet("2.16.840.1.113883.1.11.20.4","282100009", 
       "2.16.840.1.113883.6.96","Select Agent","SNOMED CT"); 
     listValueSet_Agent.add(valueSet); 

     //spinner status 
     Spinner sAgent = (Spinner) v.findViewById(R.id.combo_agent); 
     adapterAgent = new ArrayAdapter<AlertValueSet>(v.getContext(), 
       android.R.layout.simple_spinner_item, listValueSet_Agent); 
     sAgent.setAdapter(adapterAgent); 
     sAgent.setSelection(0); 
     sAgent.setOnItemSelectedListener(new SpinnerActivity()); 
     return builder.create(); 
} 

このクラスは、代わりにOnItemSelectedListenerクラスの実装です:

public class SpinnerActivity implements AdapterView.OnItemSelectedListener { 

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

      Spinner spinnerAgentN = new Spinner(v.getContext()); 
      spinnerAgentN.setAdapter(adapterAgent); 
      spinnerAgentN.setSelection(listValueSet_Agent.size()-1); 
      spinnerAgentN.setOnItemSelectedListener(new SpinnerActivity()); 
      LinearLayout linearLayout = (LinearLayout)v.findViewById(R.id.layoutText); 
      linearLayout.addView(spinnerAgentN,2); 
     } 

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

     } 

    } 

は今、私は自分のアプリケーションを実行しようとする場合、問題は、この方法(onItemSelected)は毎回のために呼ばれている、と私は私の活動Nスピナーで見ることができるが、これは良くありません。私はこのコードを削除しようと

は:

spinnerAgentN.setOnItemSelectedListener(new SpinnerActivity()); 

私は問題ありません。

どうすれば修正できますか?

+0

をごonItemSelected方法を変更します。 –

+0

あなたは私の解を説明できますか? – bircastri

答えて

0

データがアダプタに設定されているときに、onitemクリックリスナーが自動的に呼び出されます。したがって、アイテムのクリックリスナーメソッドでは、位置の値を確認する必要があります。位置の値が0の場合、データを2番目のスピナーに設定していない場合は、2番目のスピナーにデータを設定する必要があります。コードや要件の私の理解あたりとして

0

インサイドonItemSelected()

public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) { 
     AlertValueSet set = listValueSet_Agent.get(pos); 
     // Fetch new data based on the selected item and set it back to the spinner 

     adapterAgent = new ArrayAdapter<AlertValueSet>(v.getContext(), 
      android.R.layout.simple_spinner_item, listValueSet_Agent); 
     sAgent.setAdapter(adapterAgent); 
    } 
0

、あなたのクエリを解決するための2つのオプションがあります。

しかし、私はちょうど以下のようにあなたの配列を宣言するあなたの条件

に適合している唯一のものを説明します。

listValueSet_Agent = new ArrayList<AlertValueSet>(); 
    valueSet = new AlertValueSet("Select","2.16.840.1.113883.1.11.20.4","106190000", 
      "2.16.840.1.113883.6.96","Penicillin","SNOMED CT"); 
    listValueSet_Agent.add(valueSet); 
    valueSet = new AlertValueSet("Select","2.16.840.1.113883.1.11.20.4","281647001", 
      "2.16.840.1.113883.6.96","Aspirin","SNOMED CT"); 
    listValueSet_Agent.add(valueSet); 
    valueSet = new AlertValueSet("Select","2.16.840.1.113883.1.11.20.4","282100009", 
      "2.16.840.1.113883.6.96","Codeine","SNOMED CT"); 
    listValueSet_Agent.add(valueSet); 
    valueSet = new AlertValueSet("Select","2.16.840.1.113883.1.11.20.4","282100009", 
      "2.16.840.1.113883.6.96","Select Agent","SNOMED CT"); 
    listValueSet_Agent.add(valueSet); 

さて、私はというし、毎回新しいスピナーを作成し、あなたが選択した項目に基づいて、アダプタデータを変更すべきだと思う、以下のように

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

     if(pos > 0) 
     { 
      Spinner spinnerAgentN = new Spinner(v.getContext()); 
      spinnerAgentN.setAdapter(adapterAgent); 
      spinnerAgentN.setSelection(listValueSet_Agent.size()-1); 
      spinnerAgentN.setOnItemSelectedListener(new SpinnerActivity()); 
      LinearLayout linearLayout = (LinearLayout)v.findViewById(R.id.layoutText); 
      linearLayout.addView(spinnerAgentN,2); 
     } 
    } 

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

    } 
関連する問題