“同步”两个微调器

时间:2013-04-02 04:25:59

标签: android

我有两个旋转器,我想成为"捆绑"互相排斥的意思是:如果你选择一个项目,该项目的文本会变为红色并显示在顶部,而另一个文本会返回显示初始项目("标题&# 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侦听器无法触发已经选中的项目。虽然我意识到这在技术上是正确的,但这个问题似乎相对简单,我确信必须有一个解决方法来产生预期的效果。

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

  1. 有没有办法将旋转器中的所有项目设置为未选中,同时仍显示其中一项?
  2. 我是否可以使用其他类型的活动(例如&#39; setOnTouchListener&#39;,&#39; setOnClickListener&#39;等),可能是在顶部项目上,与onItemSelectedListener一起使用?
  3. 我应该单独使用不同类型的事件,也许是在没有onItemSelectedListener
  4. 的情况下在微调器本身中膨胀的视图上
  5. 你能帮助我找到一个比上面提到的那些更好的策略吗?

3 个答案:

答案 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

我使用ButtonsDialogFragments实现了与此非常类似的功能,但效果很好。

答案 2 :(得分:0)

所以,你可以让旋转器中的第一项不是有效的选择,如&#34; [选择一个]&#34;或&#34; [选择标题]&#34;迫使听众每次都开火。

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

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