And*_*der 26 android spinner android-spinner
我有一个微调器,我在对话框视图中显示,并且onItemSelected
调用对话框开始的那一刻.我真的不想处理这个,但只有当用户做出选择时.所以我要么阻止这种情况(可能是因为没有设置默认值?),或者我需要知道进行此选择的用户不是?
小智 41
Bill Mote解决方案精神的另一个选择是使其成为OnItemSelectedListener
一个OnTouchListener
.然后,可以在onTouch方法中将用户交互标志设置为true,并在onItemSelected()
处理选择更改后重置.我更喜欢这种解决方案,因为用户交互标志专门为微调器处理,而不是针对活动中可能影响所需行为的其他视图.
在代码中:
为微调器创建监听器:
public class SpinnerInteractionListener implements AdapterView.OnItemSelectedListener, View.OnTouchListener {
boolean userSelect = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
userSelect = true;
return false;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (userSelect) {
// Your selection handling code here
userSelect = false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
将侦听器作为an OnItemSelectedListener
和an 添加到微调器OnTouchListener
:
SpinnerInteractionListener listener = new SpinnerInteractionListener();
mSpinnerView.setOnTouchListener(listener);
mSpinnerView.setOnItemSelectedListener(listener);
Run Code Online (Sandbox Code Playgroud)
Gün*_*kin 22
你可以简单地添加一个int计数来解决它:)
sp.setOnItemSelectedListener(new OnItemSelectedListener() {
int count=0;
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
if(count >= 1){
int item = sp.getSelectedItemPosition();
Toast.makeText(getBaseContext(),
"You have selected the book: " + androidBooks[item],
Toast.LENGTH_SHORT).show();
}
count++;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Run Code Online (Sandbox Code Playgroud)
从API级别3开始,您可以在具有布尔值的Activity上使用onUserInteraction()来确定用户是否正在与设备进行交互.
http://developer.android.com/reference/android/app/Activity.html#onUserInteraction()
@Override
public void onUserInteraction() {
super.onUserInteraction();
userIsInteracting = true;
}
Run Code Online (Sandbox Code Playgroud)
作为活动的一个领域,我有:
private boolean userIsInteracting;
Run Code Online (Sandbox Code Playgroud)
最后,我的微调器:
mSpinnerView.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View view, int position, long arg3) {
spinnerAdapter.setmPreviousSelectedIndex(position);
if (userIsInteracting) {
updateGUI();
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Run Code Online (Sandbox Code Playgroud)
当你来完成活动时,布尔值会重置为false.奇迹般有效.
Androider,我找到了解决这个问题的方法并在此处发布(带代码示例):
当没有假设时,Spinner onItemSelected()会执行
归档时间: |
|
查看次数: |
31155 次 |
最近记录: |