6

我有两个微调器,我想以互斥的方式相互“绑定”:如果您在其中选择一个项目,该项目的文本将变为红色并显示在顶部,而另一个则返回显示初始(“标题”)选择(如果之前选择了另一个项目),其文本变为白色。

这一切都是通过 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"));
....

对于“问题微调器”,反之亦然。我的问题是,如果我从一个微调器转到另一个并选择顶部项目,则 onItemSelectedListener 不会注册,因为正在选择的项目已被选中。

我被告知这是不可能的。或者,更确切地说,有人告诉我,onItemSelected 侦听器不可能在已选择的项目上触发。虽然我意识到这在技术上是正确的,但这个问题似乎相对简单,我确信必须有一种解决方法才能产生预期的效果。

关于我正在思考的一些问题,我有几个问题:

  1. 有没有办法将微调器中的所有项目设置为未选中,同时仍显示其中一个?
  2. 我可以使用不同类型的事件(即“setOnTouchListener”、“setOnClickListener”等),大概在顶部项目上,与onItemSelectedListener?
  3. 我是否应该单独使用不同类型的事件,也许是在微调器本身膨胀的视图上,没有onItemSelectedListener?
  4. 你能帮我找到比上面提到的那些更好的策略吗?
4

3 回答 3

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
    }

}

您还可以考虑一些额外的变量或参数来跟踪项目是否是第一次选择。

于 2013-04-02T06:10:55.187 回答
1

不要使用 a Spinner,而是使用在Button视觉上类似于非活动 的 a Spinner。单击按钮时,显示一个Dialog包含ListView. 您可以使用'ssetSelection中的方法和/或位置来显示当前选择的项目。无论该项目是否被选中, '都会收到点击某事的通知。AdaptergetViewListViewOnItemClickListener

当您找到单击了哪个项目时,隐藏Dialog并通知包含Activity此按钮的按钮,以便它可以Buttons在需要时更新两者。

DialogFragments我已经使用和 a实现了与此非常相似的东西DialogFragmentParent,并且效果很好。

于 2013-04-09T11:43:52.910 回答
0

因此,您可以使微调器中的第一项成为无效选择,例如“[Choose one]”或“[Select Title]”,从而强制侦听器每次都触发。

这将具有额外的好处,您将知道用户在下一步之前确实选择了某些内容。

当然,这将取决于所需的应用程序流程。

于 2013-04-13T20:04:34.473 回答