2014-11-08 107 views
4

在我的情況下,我想從Spinner中獲取所選項目的Id。我在模態類中有兩個字段,分別是id和name。我列出了所有數據,並將這個列表設置爲適配器。我試圖通過使用getSelectedItem()方法來獲取selectedItem Id。但我只能得到項目列表的第一個ID。Android:如何從Spinner中獲取所選項目的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; 
} 

有人可以幫我解決這個問題嗎?

+0

發佈您的完整代碼 – 2014-11-08 05:37:40

回答

1

使用獲取位置選擇從適配器列表保持項目數據:

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

    } 
}); 
0

您微調使用view.OnItemSelectedListener,你會得到一個INT位置,你可以在ID使用您所選項目

1

從我的同學分享示例代碼來獲得所選擇的項目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 
      } 
     }); 

乾杯:)

相關問題