2011-04-20 98 views
0

在我的程序之间进行切换,我想用两个车轮组的类似如下:两个侦听

hours = (WheelView) findViewById(R.id.hour); 
NumericWheelAdapter hourAdapter = new NumericWheelAdapter(this, 0, 23, "%02d"); 
hourAdapter.setItemResource(R.layout.wheel_text_item); 
hourAdapter.setItemTextResource(R.id.text); 
hours.setViewAdapter(hourAdapter); 
hours.setCyclic(true); 

这些轮子有scrollinglistener hours.addScrollingListener(scrolledListener);

的scrollinglistener看起来是这样的:

// Wheel scrolled listener 
OnWheelScrollListener scrolledListener = new OnWheelScrollListener() { 
    public void onScrollingStarted(WheelView wheel) { 
    } 
    public void onScrollingFinished(WheelView wheel) { 
    update(); 
    } 
}; 

我想设置其中一个轮的值,但当我实例化两个听众,并滚动第一个它继续设置轮一然后whe el二,然后再轮一个。

是否可以禁用两个scrolledListener中的一个?

我已经试过这样:

hours.addScrollingListener(null); 
    hours.setEnabled(false); 

但是,这给了一个错误,程序必须停止。

感谢您的帮助!

PS:车轮是从 * Android轮控制。 *

回答

0

我已经联系设计师,尤里,我使用轮子的,他给了我下面的解决方案,它的工作原理:

// Wheel scrolled listener 
OnWheelScrollListener scrolledListener = new OnWheelScrollListener() { 
    boolean syncInProgress = false; 

    public void onScrollingStarted(WheelView wheel) { 
    } 
    public void onScrollingFinished(WheelView wheel) { 

     if (syncInProgress) { 
      syncInProgress = false; 
      return; 
     } 

     syncInProgress = true; 
     if (wheel.getId() == R.id.wheel1) { 
      // do something 
     } else if (wheel.getId() == R.id.wheel2) { 
      // do something else 
     } 
    } 
}; 

谢谢所有的帮助!

0

从它的声音中,您将两个OnWheelScrollListener添加到同一个WheelView侦听器列表,该列表将回调它包含的每个侦听器,这将解释您的行为。应该以类似的方式,以这种添加的听众......

hours = (WheelView) findViewById(R.id.hour); 
     hours.addScrollingListener(new OnWheelScrollListener() { 
      public void onScrollingStarted(WheelView wheel) { 
      } 
      public void onScrollingFinished(WheelView wheel) { 
      update(); 
      } 
     }); 

     hours2 = (WheelView) findViewById(R.id.hour2); 
     hours2.addScrollingListener(new OnWheelScrollListener() { 
      public void onScrollingStarted(WheelView wheel) { 
      } 
      public void onScrollingFinished(WheelView wheel) { 
      update(); 
      } 
     }); 

另外,您要使用的removeScrollingListener(OnWheelScrollListener)方法来删除一个监听器... hours.addScrollingListener(null);只是添加空至您的列表这是造成你的NullPointerException我认为。

编辑

OnWheelScrollListener listener = new OnWheelScrollListener() { 
       public void onScrollingStarted(WheelView wheel) { 
       } 
       public void onScrollingFinished(WheelView wheel) { 
       if (wheel.getId() == R.id.hour) { 
    //do wheel 1 logic 
    } else if (wheel.getId() == R.id.hour2) { 
    //do wheel 2 logic 
    } 
      }; 

hours.addScrollingListener(listener); 
hours2.addScrollingListener(listener); 
+2

尽管如此,他可以为每个视图添加相同的侦听器,并检查侦听器代码中的WheelView。 if(wheel == hours){} else if(wheel == hours2){} – Maximus 2011-04-20 17:53:18

+0

确实,这看起来像是比我更优雅的解决方案。 – Joe 2011-04-20 18:04:23

+0

感谢您的回复!我已经尝试了如果结构,但这仍然不断更新第一轮,然后另一个。将车轮设置为一个值将激活监听器。也许听众的反应与其他听众相比有所不同。 – patrick 2011-04-20 18:39:51