如何根据ID而不是索引或位置在微调器上设置选择

问题描述 投票:2回答:3

我有微调器,包含值和ID,如下所示:

ID      message
---     ----
100     Elephant
120     Lion
125     Cat
153     Dog
165     Bear

这是在我的微调器上只显示值的方法:

    public class Message {
private Int id;
private String message;
public Int getId() {
    return id;
}
public void setId(Int id) {
    this.id = id;
}
public String getMessage() {
    return message;
}
public void setMessage(String message) {
    this.message = message;
}

 @Override
 public String toString() {          
     return  message;
 }

这是我将Message传递给我的适配器的方式:

 protected List<Message> messages = null;
ArrayAdapter <Message> arrayadapter = new ArrayAdapter<Message>( activity,android.R.layout.simple_spinner_item,messages);               
                    arrayadapter.setDropDownViewResource(R.layout.textview);

spinner1.setAdapter(arrayadapter);

这是我如何从选定的微调器获取ID:

    spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {
            Message mSelected = (Message) parent.getItemAtPosition(pos);
            Log.i("Id:", mSelected.getId());

        }
}

问题是当我尝试根据ID: 165这样的ID设置我的微调器,而不是从值或索引时,我尝试了这个方法:

ArrayAdapter myAdap = (ArrayAdapter) spinner1.getAdapter();
        int spinnerPosition = myAdap.getPosition(message.getID());
        spinner1.setSelection(Message.getID());

但它返回错误,所以我的问题,如何根据他们的ID在微调器上设置选择?

java android spinner
3个回答
0
投票

我必须做同样的事情我所做的是创建一个名为SpinnerPosition的额外int并将其添加到我的模型中(就像你的Message类一样)

然后做了这样的事情:

 spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        Message mSelected = mSelected.setSpinnerPosition(pos);
        Log.i("Id:", mSelected.getId());

    }
}

所以现在你可以做一些事情(如果你从某个地方得到id)

ArrayAdapter myAdap = (ArrayAdapter) spinner1.getAdapter();
         if (Message.getID() == id) {
        previousSelected = Message.getSpinnerPosition();
        int spinnerPosition = myAdap.previousSelected;
        spinner1.setSelection(spinnerPosition);
}

我很快写了代码,所以它可能会有一些错误,但我希望得到它背后的想法


0
投票

用这个,

 spinner2.setSelection(getIndex(spinner2, Message.getID()));
        spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

                String CandidateNos = spinner2.getSelectedItem().toString();
                System.out.println("Spinner 2:"+CandidateNos);


            }
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });



 private int getIndex(Spinner spinner, int myString)
 {
  int index = 0;

  for (int i=0;i<spinner.getCount();i++){
   if (Integer.parseInt(spinner.getItemAtPosition(i).toString())==myString){
    index = i;
    i=spinner.getCount();//will stop the loop, kind of break, by making condition false
   }
  }
  return index;
 } 

0
投票

如果使用_id字段,这很容易。下面的代码从Spinner Cursor中的_id字段获取值,并输出该字段在curser中的位置(例如行号)

//in onCreate or wherever...  iID = your chosen ID.  myOrder = the position to set the spinner
 Spinner mySpinner =(Spinner)findViewById(R.id.someSpinner);
 int iID = 5;  //find the index for the value #5 in your cursor
 int myOrder = getSpinnerIndex(mySpinner,iID);
 mySpinner.setSelection(myOrder);


 //function we are calling from above code.  put it elsewhere in your class.
    private int getSpinnerIndex(Spinner spinner, int mySetId)
    {
        int index = 0;
        for (int i=0;i<spinner.getCount();i++){
            if (spinner.getItemIdAtPosition(i)==mySetId){
                index = i;
                i=spinner.getCount();
            }
        }
        return index;
    }
© www.soinside.com 2019 - 2024. All rights reserved.