【问题标题】:how can I get selected value in spinner such as C# ComboBox?如何在诸如 C# ComboBox 之类的微调器中获取选定值?
【发布时间】:2012-12-30 13:23:16
【问题描述】:

我试图制作一个包含 Id 和 Title 的自定义 Spinner。此 Spinner 显示标题,但在我的代码中的任何地方我都可以访问选定的 Id。我该怎么做。这就像 C# 中的 ComboBox。 谢谢。

【问题讨论】:

    标签: android spinner custom-component


    【解决方案1】:

    我解决了! 起初我创建了一个自定义适配器:

    public class SimpleCustomeAdapter extends ArrayAdapter<String>{
    
    Context c;
    List<String> id;
    List<String> title;
    public SimpleCustomeAdapter(Context context, int textViewResourceId,List<String> id, List<String> title) {
    
        super(context, textViewResourceId,id);
    
        c=context;
        this.id=id;
        this.title=title;
    }
    
    @Override
    public View getDropDownView(int position, View convertView,ViewGroup parent) {
    
        return getCustomView(position, convertView, parent);        
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
    
    public View getCustomView(int position, View convertView, ViewGroup parent) {
        this.setDropDownViewResource(R.layout.spinner_layout);
    
        LayoutInflater inflater=LayoutInflater.from(c);
        View row=inflater.inflate(R.layout.spinner_layout, parent, false);
        TextView idTextView=(TextView)row.findViewById(R.id.idCustomspinnertextView);
        idTextView.setText(id.get(position));
    
        TextView titleTextView=(TextView)row.findViewById(R.id.titleCustomspinnertextView);
        titleTextView.setText(title.get(position));
    
        Typeface externalFont=Typeface.createFromAsset(c.getAssets(), "font/BKOODB.TTF");
        titleTextView.setTypeface(externalFont);
        titleTextView.setTextSize(25);
        return row;
    }
    

    }

    然后,我创建了一个自定义 Spinner:

    public class CustomSpinner extends Spinner {
    public CustomSpinner(Context context, AttributeSet attrs, int defStyle,
            int mode) {
        super(context, attrs, defStyle, mode);
        // TODO Auto-generated constructor stub
    }
    
    public CustomSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    
    public CustomSpinner(Context context, int mode) {
        super(context, mode);
        // TODO Auto-generated constructor stub
    }
    
    List<String> idList;
    List<String> titleList;
    public void setAdapter(SimpleCustomeAdapter adapter) {
        // TODO Auto-generated method stub
        super.setAdapter(adapter);
        this.idList= adapter.id;
        this.titleList = adapter.title;
    }
    
    public void setSelectedId(long id){
        for (int i = 0; i < idList.size(); i++) {
            if(idList.get(i).contains(id+""))
            {
                this.setSelection(i);
                break;
            }
        }
        Log.d("SpinnerError", "This id is not in adapter!");
    }
    
    public CustomSpinner(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    

    }

    现在我的活动代码是这样的:

        public class MyActivity extends Activity {
    
    CustomSpinner customspinner1;
    Button button1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    
        customspinner1=(CustomSpinner)findViewById(R.id.customSpinner1);
        button1=(Button) findViewById(R.id.button1);
    
        List<String> payoffTypeList = new ArrayList<String>();
        List<String> payoffTypeIdList = new ArrayList<String>();
    
        DatabaseAccess dba = new DatabaseAccess(this);
    
        Cursor cur = dba.getAllPayofftype();
        if (cur.moveToFirst()) {
            do {
                payoffTypeList.add(cur.getString(1));
                payoffTypeIdList.add(cur.getString(0));
            } while (cur.moveToNext());
        }
    
    
    
        customspinner1.setAdapter(new SimpleCustomeAdapter(this, R.layout.spinner_layout,payoffTypeIdList, payoffTypeList));
    
        ///example
        customspinner1.setSelectedId(12);
    
        button1.setOnClickListener(new OnClickListener() {
    
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Log.d("myTag", "SlectedId = "+customspinner1.getSelectedId());
            }
        });
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以按照example 获取微调器的选定值:

      创建一个实现 AdapterView.OnItemSelectedListener 的嵌套类。这将提供一个回调方法,当从 Spinner 中选择了一个项目时将通知您的应用程序。

      在该类的“onItemSelected”方法中,可以获取选中的项目:

      public class YourItemSelectedListener implements OnItemSelectedListener {
      
          public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
              String selected = parent.getItemAtPosition(pos).toString();
          }
      
          public void onNothingSelected(AdapterView parent) {
              // Do nothing.
          }
      }
      

      最后,你的 ItemSelectedListener 需要在 Spinner 中注册:

      spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
      

      编辑:

      A spinner does not support item click events. Calling this method will raise an exception.
      

      【讨论】:

      • 我可以在按钮按下事件中使用 spinner1.getSelectionId()(或类似的东西)吗?我不这么认为!
      • 例如,我的活动中有一个 button1。在 button1 onClick 事件中,我想使用 spinner1.getSelectedId()。在你的例子中我该怎么做?
      • spinner.getSelectedItem(),spinner.getSelectedItemId(),spinner.getSelectedItemPosition()
      【解决方案3】:

      如果您在单独的数组中有 id 和名称,则根据微调器选定项目的位置,您可以获得选定的项目 id。

      spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
      
          public void onItemSelected(AdapterView<?> arg0, View arg1,
                          int arg2, long arg3) 
          {
              System.out.println(Id_arr[spinner.getSelectedItemPosition()]);// for spinner id
              System.out.println(spinner.getSelectedItem().toString());// for spinner item
          }
      
          public void onNothingSelected(AdapterView<?> arg0) {
                      // TODO Auto-generated method stub
      
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多