Android微调器:获取所选项目更改事件
当所选项目更改时,如何为微调器设置事件侦听器 基本上,我想做的事情与此类似:Android微调器:获取所选项目更改事件,android,events,spinner,android-spinner,Android,Events,Spinner,Android Spinner,当所选项目更改时,如何为微调器设置事件侦听器 基本上,我想做的事情与此类似: spinner1.onSelectionChange = handleSelectionChange; void handleSelectionChange(Object sender){ //handle event } spinner小部件的文档说 微调器不支持项目单击事件 您应该使用setOnItemSelectedListener来处理您的问题。前面的一些答案不正确。它们适用于其他窗口小部件和视图,
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
spinner小部件的文档说 微调器不支持项目单击事件
您应该使用
setOnItemSelectedListener
来处理您的问题。前面的一些答案不正确。它们适用于其他窗口小部件和视图,但文档中明确指出:
微调器不支持项目单击
事件。调用此方法将引发
例外
更好地使用:
spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图selectedItemView、整型位置、长id){
//你的代码在这里
}
@凌驾
未选择公共无效(AdapterView父视图){
//你的代码在这里
}
});
这对我有用
注意,当正在构建视图时也调用OnItMeMead方法,因此可以考虑将其放入代码> OnCeCATE()/<代码>方法调用。
微调器spnLocale=(微调器)findViewById(R.id.spnLocale);
Spinner spnLocale = (Spinner)findViewById(R.id.spnLocale);
spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
// Your code here
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
已选择公共视图(AdapterView AdapterView,View视图,int i,long l){
//你的代码在这里
}
未选择公共无效(AdapterView AdapterView){
返回;
}
});
注意:记住一件事
微调器OnItemSelectedListener
事件将执行两次:
微调器spnLocale;
spnLocale=(微调器)findViewById(R.id.spnLocale);
int iccurrentselection=spnLocale.getSelectedItemPosition();
setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
已选择公共视图(AdapterView AdapterView,View视图,int i,long l){
如果(iCurrentSelection!=i){
//你的代码在这里
}
iccurrentselection=i;
}
未选择公共无效(AdapterView AdapterView){
返回;
}
});
原因
ICcurrentSelection
应该在对象范围内才能工作我认为最好的方法是选择一个flagitemselected=0代码>在onCreate()
中。并在所选项目事件上增加该标志,即flagitemselected++
;然后检查
if(flagitemselected!=1)
{
// do your work here
}
这将有助于我的猜测。我发现的一个技巧是将setOnItemSelectedListeners放在onWindowFocusChanged而不是onCreate中。我还没有发现这样做有任何不良副作用。基本上,在绘制窗口后设置侦听器。我不确定onWindowFocusChanged运行的频率,但是如果您发现它运行得太频繁,那么创建一个锁变量就很容易了
我认为Android可能正在使用一个基于消息的处理系统,如果你把它全部放在onCreate中,你可能会遇到这样的情况,即在绘制微调器之后填充微调器。因此,在设置项目位置后,侦听器将启动。当然,这是一个有根据的猜测,但请随时纠正我的错误。找到您的微调器名称并找到id,然后实现此方法
spinnername.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
spinnername.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图selectedItemView、整型位置、长id){
//你的代码在这里
}
@凌驾
未选择公共无效(AdapterView父视图){
//你的代码在这里
}
});
您可以在活动中实现AdapterView.OnItemSelectedListener
类
然后在onCreate()中使用下面的行
然后重写这两种方法:
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
selection.setText(items[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
selection.setText("");
}
public void已选择(AdapterView父视图、视图v、int位置、长id){
selection.setText(项目[位置]);
}
未选择公共无效(AdapterView父级){
selection.setText(“”);
}
spinner.setOnItemSelectedListener(
新建AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
//在这里添加一些代码
}
);
为当前选择的微调器获取全局变量:
int currentItem = 0;
spinner_counter = (Spinner)findViewById(R.id.spinner_counter);
String[] value={"20","40","60","80","100","All"};
aa=new ArrayAdapter<String>(this,R.layout.spinner_item_profile,value);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_counter.setAdapter(aa);
spinner_counter.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(currentItem == position){
return; //do nothing
}
else
{
TextView spinner_item_text = (TextView) view;
//write your code here
}
currentItem = position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//R.layout.spinner_item_profile
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/spinner_item_text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border_close_profile"
android:gravity="start"
android:textColor="@color/black"
android:paddingLeft="5dip"
android:paddingStart="5dip"
android:paddingTop="12dip"
android:paddingBottom="12dip"
/>
//drawable/border_close_profile
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#e2e3d7" />
</shape>
</item>
<item android:left="1dp"
android:right="1dp"
android:top="1dp"
android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/white_text" />
</shape>
</item>
</layer-list>
int currentItem=0;
微调器计数器=(微调器)findViewById(R.id.spinner\u计数器);
字符串[]值={“20”、“40”、“60”、“80”、“100”、“全部”};
aa=新阵列适配器(此,R.layout.spinner\u item\u profile,值);
aa.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
微调器/计数器设置适配器(aa);
微调器\计数器.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
如果(currentItem==位置){
return;//什么也不做
}
其他的
{
TextView微调器\项目\文本=(TextView)视图;
//在这里编写代码
}
当前项=位置;
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
//R.layout.spinner\u项目\u配置文件
//可绘制/边框\闭合\剖面
spinnername.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
Spinner spin = (Spinner) findViewById(R.id.spinner);
spin.setOnItemSelectedListener(this);
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
selection.setText(items[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
selection.setText("");
}
spinner.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
//add some code here
}
);
int currentItem = 0;
spinner_counter = (Spinner)findViewById(R.id.spinner_counter);
String[] value={"20","40","60","80","100","All"};
aa=new ArrayAdapter<String>(this,R.layout.spinner_item_profile,value);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_counter.setAdapter(aa);
spinner_counter.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(currentItem == position){
return; //do nothing
}
else
{
TextView spinner_item_text = (TextView) view;
//write your code here
}
currentItem = position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
//R.layout.spinner_item_profile
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/spinner_item_text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border_close_profile"
android:gravity="start"
android:textColor="@color/black"
android:paddingLeft="5dip"
android:paddingStart="5dip"
android:paddingTop="12dip"
android:paddingBottom="12dip"
/>
//drawable/border_close_profile
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#e2e3d7" />
</shape>
</item>
<item android:left="1dp"
android:right="1dp"
android:top="1dp"
android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/white_text" />
</shape>
</item>
</layer-list>
private Spinner mSpinner;
private boolean mSpinnerInitialized;
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if (!mSpinnerInitialized) {
mSpinnerInitialized = true;
return;
}
// do stuff
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
String initialValue = // get from Database or your object
mySpinner.setOnItemSelectedListener(new SpinnerSelectedListener(initialValue));
protected class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener {
private SpinnerSelectedListener() {
super();
}
public SpinnerSelectedListener(String initialValue) {
this();
this.initialValue = initialValue;
}
private String initialValue;
// getter and setter removed.
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
final String newValue = (String) spinHeight.getItemAtPosition(position);
if (newValue.equals(initialValue) == false) {
// Add your code here. The spinner has changed value.
// Maybe useful.
// initialValue = newValue;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Maybe useful.
// initialValue = null;
}
}
Spinner schemeStatusSpinner;
schemeStatusSpinner = (Spinner) dialog.findViewById(R.id.spinner);
schemeStatusSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
if(schemeStatusSpinner.getSelectedItemId()==4){
reasonll.setVisibility(View.VISIBLE);
}
else {
reasonll.setVisibility(View.GONE);
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
value = spinner.getSelectedItem().toString();
pos = spinner.getSelectedItemPosition();
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}
yourspinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(adapterView: AdapterView<*>?, view: View, i: Int, l: Long) {
yourvalue = yourspinner.getSelectedItem().toString()
when(yourvalue){
"Please Select" -> // DO nothing
else -> // Do something
}
}
override fun onNothingSelected(adapterView: AdapterView<*>?) {
return
}
}