如何在微调器中获取选定值,例如C#ComboBox?

时间:2013-01-16 09:15:07

标签: android spinner custom-component

我尝试制作一个包含Id和Title的自定义Spinner。此Spinner显示标题,但在我的代码中,我可以访问所选的Id。我该怎么做。它就像C#中的ComboBox。 感谢。

3 个答案:

答案 0 :(得分:1)

您可以按照此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.

答案 1 :(得分:1)

如果您在单独的数组中有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

    }
});

答案 2 :(得分: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());
        }
    });

}