安卓:如何从Spinner中获取所选项目的ID?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓:如何从Spinner中获取所选项目的ID?相关的知识,希望对你有一定的参考价值。

在我的例子中,我想从Spinner中获取所选项目的Id。我的模态类有两个字段,分别是id和name。我列出了所有的数据,并将这个列表设置为适配器。我试着用getSelectedItem()方法来获取selectedItem的Id。但我只能得到列表中第一个项目的id。

这是我的代码。

public class ModifyEventFragment extends DialogFragment
Context context;
CalEvent eve;
Project proj;
Spinner eventType,stage;
public static String eid,pid,type;
public static List<EventType> event_type;
public static List<ProjectStatus> cust_stage;
EditText where,when,who,notes;
String eve_type,stage_val,when_val,who_val,notes_val;
String modified_where,modified_who,modified_when,modified_notes;
public ModifyEventFragment(Project proj)

    this.proj=proj;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
    View rootView = inflater.inflate(R.layout.modify_project_event, container,
            false);
    context = rootView.getContext();
    eventType = (Spinner) rootView.findViewById(R.id.modifyEventType);
    stage =(Spinner) rootView.findViewById(R.id.modifyStage);
    where = (EditText)rootView.findViewById(R.id.modifyWhere);
    who = (EditText)rootView.findViewById(R.id.modifyWho);
    when = (EditText)rootView.findViewById(R.id.modifyWhen);
    notes =(EditText) rootView.findViewById(R.id.modifyNotes);
    eve = CalEvent.getCalEvent(ProjectEventFragment.calevent.eve_id);
    event_type = EventType.listAll();
    CustomEventTypeAdapter adapter = new CustomEventTypeAdapter(context, event_type);
    eventType.setAdapter(adapter);
    type=((EventType)eventType.getSelectedItem()).et_id;
    cust_stage = ProjectStatus.listAll();
    CustomStatusAdapter adapter1 = new CustomStatusAdapter(context, cust_stage);
    stage.setAdapter(adapter1);
    where.setText(eve.followup_location.toString());
    where.addTextChangedListener(new TextWatcher() 

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 
            // TODO Auto-generated method stub

        

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) 
            // TODO Auto-generated method stub

        

        @Override
        public void afterTextChanged(Editable s) 
            // TODO Auto-generated method stub
            modified_where = s.toString();
        
    );
    who.setText(eve.person_met.toString());
    who.addTextChangedListener(new TextWatcher() 

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 
            // TODO Auto-generated method stub

        

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) 
            // TODO Auto-generated method stub

        

        @Override
        public void afterTextChanged(Editable s) 
            // TODO Auto-generated method stub
            modified_who = s.toString();
        
    );
    when.setText(eve.event_start.toString());
    when.addTextChangedListener(new TextWatcher() 

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 
            // TODO Auto-generated method stub

        

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) 
            // TODO Auto-generated method stub

        

        @Override
        public void afterTextChanged(Editable s) 
            // TODO Auto-generated method stub
            modified_when = s.toString();
        
    );
    notes.setText(eve.notes.toString());
    notes.addTextChangedListener(new TextWatcher() 

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 
            // TODO Auto-generated method stub

        

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) 
            // TODO Auto-generated method stub

        

        @Override
        public void afterTextChanged(Editable s) 
            // TODO Auto-generated method stub
            modified_notes = s.toString();
        
    );
    Button save = (Button) rootView.findViewById(R.id.modifyeventsave);

    save.setOnClickListener(new OnClickListener() 
        @Override
        public void onClick(View v) 
            // TODO Auto-generated method stub
            eve.followup_location = modified_where;
            eve.event_start = modified_when;
            eve.person_met = modified_who;
            eve.notes = modified_notes;
            System.out.println("print type"+type);
            eve.save();
            ProjectEventFragment.adapter.notifyDataSetChanged();
        
    );

    return rootView;

这是CustomEventType适配器的代码。

public class CustomEventTypeAdapter extends BaseAdapter
Context ctx;
List<EventType> ps;
LayoutInflater inflater;
public CustomEventTypeAdapter(Context ctx,List<EventType> ps)

    this.ctx=ctx;
    this.ps=ps;
    inflater = (LayoutInflater) ctx
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

@Override
public int getCount() 
    // TODO Auto-generated method stub
    return ps.size();


@Override
public EventType getItem(int position) 
    // TODO Auto-generated method stub
    return ps.get(position);


@Override
public long getItemId(int position) 
    // TODO Auto-generated method stub
    return ps.get(position).getId();


@Override
public View getView(int position, View convertView, ViewGroup parent) 
    View rowView = convertView;
    if (convertView == null)
        rowView = inflater.inflate(R.layout.spinner_item_local, parent,
                false);
    TextView textView = (TextView) rowView.findViewById(R.id.spinner_item_text);

    EventType proj = getItem(position);
    try 
        textView.setText(proj.name);

     catch (Exception e) 

    

    return rowView;

谁能帮我解决这个问题?

答案

使用position.Location从适配器列表持有人中获取所选项目数据。

eventType.setOnItemSelectedListener(new OnItemSelectedListener() 
     @Override
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
         String id = event_type.get(position).getId();
     

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

     
);
另一答案

分享从我的类中获取所选项目id的示例代码--。

spinner1 .setOnItemSelectedListener(new OnItemSelectedListener() 

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
                // TODO Auto-generated method stub
                spinner1 = parent.getItemAtPosition(position).toString();
                count = position; //this would give you the id of the selected item
            

            @Override
            public void onNothingSelected(AdapterView<?> arg0) 
                // TODO Auto-generated method stub
            
        );

干杯 :)

另一答案

在你的微调器上使用view.OnItemSelectedListener,你会得到一个int的位置,你可以用它来作为你所选项目的id。

另一答案

你有一个 ProjectStatus 豆。现在 Override 办法 String toString() 在其中。

public class ProjectStatus 

    private Integer id; // Long, String any type

    private String name;

    // more properties if you need

    @Override  // Mandatory
    public String toString() 
        return name; // name + " ("+id+")"; //  can also be returned
    

    // Getter & Setter

然后让 ArrayAdapter<ProjectStatus> 并将其置于 Spinner 用状态选项加载Spinner。

//Task 1.
List<ProjectStatus> cust_stages = ProjectStatus.listAll(); // Or using any JSON Data OR API call;

//Task 2.
ArrayAdapter<ProjectStatus> statusAdapter = new ArrayAdapter<ProjectStatus>(
        this, android.R.layout.simple_spinner_item, cust_stages
    );
statusAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

//Task 3.
Spinner stage =(Spinner) rootView.findViewById(R.id.modifyStage);
stage.setAdapter(statusAdapter);

现在得到选择 ProjectStatus 和它的属性在任何 Click/Change Event 喜欢下面...

// In any OnClick / OnSelect event
ProjectStatus selectedStatus = (ProjectStatus) stage.getSelectedItem();
Integer statusId = selectedStatus.getId();
String statusName = selectedStatus.getName();
// and if you have more properties

以上是关于安卓:如何从Spinner中获取所选项目的ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像视图的可见性设置为 Spinner 所选项目的可见性

如何在列表视图中获取所选项目的值 - Android

在选择选项中获取所选项目的 id 并将其发送到 URL

2020/4/10安卓开发:Spinner下拉框

如何从listview android的主列表中获取所选项目的文本

如何从 QT 中的 QListView 获取所选项目的文本? [复制]