如何从 onItemSelectedListener 获取自定义微调器的选定项目位置?
How to get the selected Item position of a customized spinner from onItemSelectedListener?
查看下图。
我想覆盖方法的 arg2 应该是我当前选择的项目的位置,对吧?但是,它始终为 0。我想要正确的位置来做事。有什么建议吗?
这是我的适配器 class。
public class PojoSpinnerAdapter extends ArrayAdapter<Pojo> {
private Activity activty;
private ArrayList<Pojo> pojoList;
LayoutInflater inflater;
public PojoSpinnerAdapter(Activity activity, int resource,
ArrayList<Pojo> pojoList) {
super(activity, resource, pojoList);
this.activty = activity;
this.pojoList = pojoList;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@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) {
View row = inflater.inflate(R.layout.taxo_spinner_item, parent, false);
Pojo pojo = pojoList.get(position);
//.... blah blah
return row;
} }
我建议不要创建这样的方法并分配 OnItemSelectedListener()
。只需在 class 中执行此操作,如此处
public class YourClass implements AdapterView.OnItemSelectedListener {}
并将this
分配给Spinner
,
或
像这里一样匿名尝试
mySpinner = (Spinner) findViewById(R.id.mySpinner);
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
int selectedPosition = arg2; //Here is your selected position
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
您也可以为此目的使用您的 getCustomView(.,.,)
public View getCustomView(int position, View convertView, ViewGroup parent) {
View row = inflater.inflate(R.layout.taxo_spinner_item, parent, false);
Pojo pojo = pojoList.get(position);
//.... blah blah
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context," position :"+position,short).show
}
});
return row;
}
查看下图。 我想覆盖方法的 arg2 应该是我当前选择的项目的位置,对吧?但是,它始终为 0。我想要正确的位置来做事。有什么建议吗?
这是我的适配器 class。
public class PojoSpinnerAdapter extends ArrayAdapter<Pojo> {
private Activity activty;
private ArrayList<Pojo> pojoList;
LayoutInflater inflater;
public PojoSpinnerAdapter(Activity activity, int resource,
ArrayList<Pojo> pojoList) {
super(activity, resource, pojoList);
this.activty = activity;
this.pojoList = pojoList;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@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) {
View row = inflater.inflate(R.layout.taxo_spinner_item, parent, false);
Pojo pojo = pojoList.get(position);
//.... blah blah
return row;
} }
我建议不要创建这样的方法并分配 OnItemSelectedListener()
。只需在 class 中执行此操作,如此处
public class YourClass implements AdapterView.OnItemSelectedListener {}
并将this
分配给Spinner
,
或
像这里一样匿名尝试
mySpinner = (Spinner) findViewById(R.id.mySpinner);
mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
int selectedPosition = arg2; //Here is your selected position
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
您也可以为此目的使用您的 getCustomView(.,.,)
public View getCustomView(int position, View convertView, ViewGroup parent) {
View row = inflater.inflate(R.layout.taxo_spinner_item, parent, false);
Pojo pojo = pojoList.get(position);
//.... blah blah
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context," position :"+position,short).show
}
});
return row;
}