我有两个旋转器,我想成为"捆绑"互相排斥的意思是:如果你选择一个项目,该项目的文本会变为红色并显示在顶部,而另一个文本会返回显示初始项目("标题&# 34;)选择(如果之前选择了另一个项目),其文本变为白色。
这一切都是通过onItemSelected侦听器完成的:
sectionSpin.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View arg1,
int position, long arg3) {
issueSpin.setSelection(0);
((TextView) issueSpin.getChildAt(0)).setTextColor(Color.parseColor("#FFFFFF"));
((TextView) arg1).setTextColor(Color.parseColor("#E3170D"));
....
反之亦然&#34;问题微调器&#34;。我的问题是,如果我从一个微调器到另一个微调器并且我选择了顶部项目,则onItemSelectedListener不会注册,因为已经选择了正在选择的项目。
我被告知这是不可能的。或者说,我已经被告知onItemSelected侦听器无法触发已经选中的项目。虽然我意识到这在技术上是正确的,但这个问题似乎相对简单,我确信必须有一个解决方法来产生预期的效果。
关于我正在思考的一些问题,我有几个问题:
onItemSelectedListener
一起使用? onItemSelectedListener
答案 0 :(得分:1)
您是否考虑过以下内容,
sectionSpin.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View arg1,
int position, long arg3) {
updateView("sectionSpin");
}
}
而另一个
issueSpin.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View arg1,
int position, long arg3) {
updateView("issueSpin");
}
}
现在
private void updateView(String spinner){
if (spinner.equals(sectionSpin)){
//update spinner per requirement
}
else{
//update spinner per requirement
}
}
您还可以考虑使用其他一些变量或参数来跟踪第一次选择的项目。
答案 1 :(得分:1)
使用视觉上类似于非活动Spinner
的{{1}},而不是使用Button
。单击该按钮后,显示包含Spinner
的自定义Dialog
。您可以使用ListView
方法和/或setSelection
Adapter
中的位置来显示当前选择的项目。无论是否选择了该项目,getView
ListView
都会收到通知,告知其已被点击。
当您找到点击了哪个项目时,请隐藏OnItemClickListener
并通知包含该按钮的Dialog
,以便在需要时同时更新Activity
。
我使用Buttons
和DialogFragments
实现了与此非常类似的功能,但效果很好。
答案 2 :(得分:0)
所以,你可以让旋转器中的第一项不是有效的选择,如&#34; [选择一个]&#34;或&#34; [选择标题]&#34;迫使听众每次都开火。
这将带来额外的好处,您将知道用户在下一步之前选择了某些内容。
当然,这取决于所需的应用程序流程。