如何从ListView自定义适配器中的微调器获取所有值

如何从ListView自定义适配器中的微调器获取所有值,listview,custom-controls,spinner,xamarin.android,Listview,Custom Controls,Spinner,Xamarin.android,我试图在ListView中创建一个微调器,但我不知道如何获取字符串列表中每个微调器的所有值。这是适配器的代码: public class CustomizeColumnsListAdapter : BaseAdapter { private Activity context; private int columnsCount; public List<string> fieldsValues; public CustomizeColumnsListA

我试图在ListView中创建一个微调器,但我不知道如何获取字符串列表中每个微调器的所有值。这是适配器的代码:

public class CustomizeColumnsListAdapter : BaseAdapter
{
    private Activity context;
    private int columnsCount;
    public List<string> fieldsValues;

    public CustomizeColumnsListAdapter(Activity context, int columnsCount)
    {
        this.context = context;
        this.dataObject = dataObject;
        this.columnsCount = columnsCount;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        RelativeLayout view = (convertView
                        ?? context.LayoutInflater.Inflate(
                                Resource.Layout.customize_column_list_item, parent, false)
                    ) as RelativeLayout;

        try
        {
            string[] sortingColumsItems = {"None", "Id", "Customer Name", "Customer Number", "City", "Address", "Credit Limit", "Contact Name", "Phone Number", "Mail"};
            ArrayAdapter<string> spinnerArrayAdapter = new ArrayAdapter<string>(context, Android.Resource.Layout.SimpleSpinnerItem, sortingColumsItems);
            spinnerArrayAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            view.FindViewById<Spinner>(Resource.Id.cboCCD).Adapter = spinnerArrayAdapter;
            view.FindViewById<Spinner>(Resource.Id.cboCCD).Enabled = true;

            if(columnsCount>=position)
            {
                string columnIndex = (position + 1).ToString();
                view.FindViewById<TextView>(Resource.Id.lblColumn).Text = columnIndex;
            }

        }
        catch (System.Exception ex)
        {
            Toast.MakeText(context, ex.ToString(), ToastLength.Short).Show(); 
        }

        return view;            

    }

    public override int Count
    {
        get { return columnsCount; }
    }

    public override Java.Lang.Object GetItem(int position)
    {
        return null;
    }

    public override long GetItemId(int position)
    {
        return position;
    }
公共类CustomizeColumnsListAdapter:BaseAdapter { 私人活动语境; 私家侦探; 公共列表字段值; 公共自定义列SlistAdapter(活动上下文,int columnsCount) { this.context=上下文; this.dataObject=dataObject; this.columnsunt=columnsunt; } 公共覆盖视图GetView(int位置、视图转换视图、视图组父视图) { RelativeLayout视图=(convertView ??上下文。布局。平坦。充气( Resource.Layout.customize\列\列表\项,父项,false) )作为相对人; 尝试 { string[]sortingColumsItems={“无”、“Id”、“客户名称”、“客户编号”、“城市”、“地址”、“信用额度”、“联系人姓名”、“电话号码”、“邮件”}; ArrayAdapter SpinnerayAdapter=新的ArrayAdapter(上下文,Android.Resource.Layout.SimpleSpinnerItem,排序列站点); spinnerrayadapter.SetDropDownViewResource(Android.Resource.Layout.SimplesInnerDropDownItem); view.findviewbyd(Resource.Id.cboCCD).Adapter=spinnerrayadapter; view.findviewbyd(Resource.Id.cboCCD).Enabled=true; 如果(columnsCount>=位置) { 字符串columnIndex=(位置+1).ToString(); view.findviewbyd(Resource.Id.lblColumn).Text=columnIndex; } } catch(System.Exception-ex) { Toast.MakeText(上下文,例如ToString(),ToastLength.Short).Show(); } 返回视图; } 公共覆盖整数计数 { 获取{return columnsunt;} } public override Java.Lang.Object GetItem(int位置) { 返回null; } 公共覆盖长GetItemId(int位置) { 返回位置; }
如果您希望向用户展示从列表的每一行启动微调器的方法,一种方法是使用自定义视图,如以下微调器行:

public class SpinnerRow : RelativeLayout, View.IOnClickListener, IDialogInterfaceOnClickListener
{
    #region Member Variables
    SpinnerItemSelectedDelegate _spinnerItemSelected;
    SpinnerPosSelectedDelegate _spinnerPosSelected;

    private TextView _label;
    private TextView _value;
    private ImageButton _edit;
    private string[] _options = new String[0];
    private int _position;

    private AlertDialog.Builder _builder;
    #endregion

    #region Construction
    public SpinnerRow (Context context) :
        base (context)
    {
        Initialize (context, null);
    }

    public SpinnerRow (Context context, IAttributeSet attrs) :
        base (context, attrs)
    {
        Initialize (context, attrs);
    }

    protected SpinnerRow (IntPtr doNotUse, Android.Runtime.JniHandleOwnership owner) :
        base (doNotUse, owner)
    {
        //Do nothing
    }

    protected void Initialize (Context context, IAttributeSet attrs)
    {
        Inflate (context, Resource.Layout.SpinnerRow, this);

        _label = FindViewById<TextView>(Resource.Id.editscope_addons_spinner_row_lbl);
        _value = FindViewById<TextView>(Resource.Id.editscope_addons_spinner_row_spin_lbl);
        _edit = FindViewById<ImageButton>(Resource.Id.editscope_addons_spinner_row_button);

        _label.Text = "Row label";
        string[] options = {"None", "Id", "Customer Name", "Customer Number", "City", "Address", "Credit Limit", "Contact Name", "Phone Number", "Mail"};
        _options = options;

        _edit.SetOnClickListener(this);

        _builder = new AlertDialog.Builder(context);
        _builder.SetTitle(_label.Text);
    }
    #endregion

    public virtual void OnClick(View v)
    {
        _builder.SetSingleChoiceItems(_options, _position, this);
        _builder.Create().Show();
    }

    public virtual void OnClick(IDialogInterface dialog, int position)
    {
        Position = position;
        _value.Text = _options[_position];

        dialog.Dismiss();
    }

    public int IndexOf(string option)
    {
        int numOptions = _options.Length;
        for (int i = 0; i < numOptions; i++)
        {
            if (_options[i].ToLower() == option.ToLower())
                return i;
        }

        return IntentConstants.INVALID_POSITION;
    }

    public bool Contains(string option)
    {
        return IndexOf(option) != IntentConstants.INVALID_POSITION;
    }

    #region Properties
    public string Text
    {
        get { return _label.Text; }
        set { _label.Text = value; }
    }

    public int Position
    {
        get { return _position; }
        set
        {
            _position = value;
            if (_position == IntentConstants.INVALID_POSITION)
            {
                _value.Text = NotSelectedText;
                if (OnSelected != null)
                    OnSelected("");
            }
            else if (_options != null && _options.Length > 0)
            {
                _value.Text = _options[_position];
                if (OnSelected != null)
                    OnSelected(_options[_position]);
            }

            if (OnPosSelected != null)
                OnPosSelected(_position);
        }
    }

    public string ValueText
    {
        get { return _value.Text; }
    }

    public String[] Options
    {
        get { return _options; }    
        set 
        { 
            _options = value;

            //Reset the current position so the text is updated
            int curPos = Position;
            _position = IntentConstants.INVALID_POSITION;
            Position = curPos;
        }
    }

    public SpinnerItemSelectedDelegate OnSelected
    {
        get { return _spinnerItemSelected; }
        set { _spinnerItemSelected = value; }
    }

    public SpinnerPosSelectedDelegate OnPosSelected
    {
        get { return _spinnerPosSelected; }
        set { _spinnerPosSelected = value; }
    }
    #endregion
}
公共类SpinnerRow:RelativeLayout、View.IOnClickListener、IDialogInterfaceOnClickListener
{
#区域成员变量
SpinnerItemSelectedDelegate\u spinnerItemSelected;
喷丝头已选择Delegate(喷丝头已选择);
私有文本视图标签;
私有文本视图_值;
私有图像按钮_编辑;
私有字符串[]_options=新字符串[0];
私人国际职位;
私有AlertDialog.Builder\u Builder;
#端区
#区域建设
公共喷丝头行(上下文):
基础(上下文)
{
初始化(上下文,null);
}
公共喷丝头行(上下文,IAttributeSet属性):
基本(上下文,属性)
{
初始化(上下文,属性);
}
受保护的SpinnerRow(IntPtr doNotUse,Android.Runtime.jnihandleowner):
基地(不使用,所有者)
{
//无所事事
}
受保护的void初始化(上下文上下文,IAttributeSet属性)
{
膨胀(context,Resource.Layout.SpinnerRow,this);
_label=findviewbyd(Resource.Id.editscope\u addons\u spinner\u row\u lbl);
_value=findviewbyd(Resource.Id.editscope\u addons\u spinner\u row\u spin\u lbl);
_edit=findviewbyd(Resource.Id.editscope\u addons\u spinner\u row\u按钮);
_label.Text=“行标签”;
字符串[]选项={“无”、“Id”、“客户名称”、“客户编号”、“城市”、“地址”、“信用额度”、“联系人姓名”、“电话号码”、“邮件”};
_选项=选项;
_edit.SetOnClickListener(这个);
_builder=新建AlertDialog.builder(上下文);
_builder.SetTitle(_label.Text);
}
#端区
公共虚拟void OnClick(视图v)
{
_builder.SetSingleChoiceItems(_选项,_位置,此项);
_builder.Create().Show();
}
公共虚拟void OnClick(IDialogInterface对话框,int位置)
{
位置=位置;
_value.Text=_选项[_位置];
dialog.dismise();
}
public int IndexOf(字符串选项)
{
int numOptions=_options.Length;
对于(int i=0;i0)
{
_value.Text=_选项[_位置];
if(OnSelected!=null)
当选(_选项[_位置]);
}
if(OnPosSelected!=null)
当选(职位);
}
}
公共字符串值文本
{
获取{return}value.Text;}
}
公共字符串[]选项
{
获取{return\u options;}
设置
{ 
_选项=价值;
//重置当前位置,以便更新文本
int curPos=位置;
_位置=IntentConstants.INVALID_位置;
位置=curPos;
}
}
公共喷丝头项目SelectedDelegate OnSelected
{
获取{r