2010-09-30 81 views
0

我有关于Spinner的onItemSelected方法的问题。如果我只有一个Spinner,没有问题。我可以设置一个听众。我有一个数据库存储在sqlite中。有一个表格,其中一个列字段包含具有年月日日期格式的日期。然后我创建了两个Spinner视图。一个月,一年。我的程序希望根据月份和年份的选择来显示数据库查询。是否有可能在Spinner上创建两个“setOnItemSelectedListeners”?

现在的问题是,如果我只在月份微调器上设置侦听器,它将显示基于月份的查询。如果我在年份Spinner中设置了侦听器,则会显示基于年份的查询。其实我已经准备了符合年份和月份查询的sql查询。但是,似乎OnItemSelected侦听器一次只能接受“一个”微调器实例。我尝试使用monthview.getItemAtPosition(position)& & yearview.getItemAtPosition(position)来匹配月和年的两个需求。但它失败了。

我使用公共类xxx扩展xxx实现OnItemSelected侦听器并添加两个方法。

spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
{ 
    @Override 
    public void onItemSelected(AdapterView<?> parent, 
      View view, int pos, long id) 
    { 
      // Do some stuff based onItemSelected 
      } 
} 

有谁知道如何实现这个目标?

简而言之,我有两个spinners,一个月,一年,值通过arrayadapter填充。然后,我使用SimpleCusrsorAdapter从sqlite数据库获取sql结果。然后我将游标结果放入listadapter中并与listview关联。如果我按照月份或年份单独操作它,但不能同时操作它,它的运行没有问题。但是,听众似乎只能同时听一个不是两个或更多的Spinner实例。可能是常见的问题。可能有些人以前已经遇到过这个问题。

或者我可以使用匿名内部类吗?但是我认为这是不同的方法和结果。如果不是,我可能需要使用另一种技术,如果只有一个监听器可用?

我想说明,例如: -I选择四月和所有年份,它会显示所有条目四月(四月在所有年份) -I选择2010年所有月份,它显示在2010年的所有条目(扬到2010年12月) - 我选择四月和2010年,它只显示2010年4月的所有条目

感谢您的解释和建议!

汤姆 最好的问候,

回答

0

最后我用getSelectedItemPosition()来获取值,并做一些决定检查解决了这个问题。然后程序运行没有问题。

但我也想知道我是否可以为Spinner或其他UI组件使用两个以上的setOnItemSelectedListener?

Tom

0

我不是100%确定我得到您的问题。

看看方法名称。

setOnItemSelectedListener 

的这里关键是设置一部分。每次调用此方法时,都会覆盖该对象以前存储的任何值。

但在你的情况下,你应该做的是为两个spinners中的每一个调用一次方法,使用一个匿名类(如你在那里)或者你的活动(这将节省一些内存因为你不必创建两个类)。

举个例子:

spinner1.setOnItemSelectedListener(classToReceiveTheSelection) 
spinner2.setOnItemSelectedListener(classToReceiveTheSelection) 

如果你绝对必须有相同的回应OnItemSelected两个不同的类,这是可能的,但有些难看。

相关问题