【问题标题】:How can I create a new Spinner dynamically after itemSelected?如何在 itemSelected 之后动态创建新的 Spinner?
【发布时间】:2016-05-16 19:49:32
【问题描述】:

我在一个 Android Activity 中有一个 Spinner 元素。

现在我想要这样,如果我选择了这个 Spinner 的 Item,我应该能够创建一个新的 Spinner 并将其放入我的活动中。如果我选择第二个 Spinner 的一个项目,我应该能够创建一个新的 Spinner ....

这是代码:

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());

我没有任何问题。

我该如何解决?

【问题讨论】:

  • 我认为与其每次都创建新的微调器,不如根据所选项目更改适配器数据。
  • 你能解释一下你的解决方案吗?

标签: android


【解决方案1】:

当数据被设置到适配器时,然后自动调用 onitem 点击监听器。因此,在项目单击侦听器方法中,您必须检查位置值。如果位置值为 0,则您没有将数据设置为第二个微调器,否则您必须将数据设置为第二个微调器。

【讨论】:

    【解决方案2】:

    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);
        }
    

    【讨论】:

      【解决方案3】:

      根据我对代码和需求的理解,有两个选项可以解决您的问题。

      但我只会解释一个适合你的要求

      只需如下声明您的数组。

         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);
      

      现在,如下更改您的 onItemSelected 方法,

           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) {
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 2022-08-14
        • 1970-01-01
        • 2018-07-31
        • 2018-04-28
        • 2017-08-28
        相关资源
        最近更新 更多