是否可以在Spinner中创建两个“setOnItemSelectedListener”?

时间:2010-09-30 06:32:26

标签: android spinner

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

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

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

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

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

简单来说,我有两个微调器,一个月,一个一年,值通过arrayadapter填充。然后我使用SimpleCusrsorAdapter从sqlite DB获取sql结果。然后我将光标结果放入listadapter并与listview相关联。如果我按月或按年单独操作它而不是两者都可以正常工作。但似乎监听器只能同时监听一个不是两个或更多的微调器实例。可能是常见问题。可能有些人之前已经遇到过这个问题。

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

我想表示,例如: - 我选择四月和所有年份,它显示四月(所有年份的四月)的所有条目 - 我选择2010年和所有月份,它显示2010年的所有条目(2010年1月至12月) - 我选择4月和2010年,它仅显示2010年4月的所有条目

感谢您的解释和建议!!

汤姆 最诚挚的问候,

2 个答案:

答案 0 :(得分:0)

最后,我通过使用getSelectedItemPosition()来获取值并进行一些决策检查来解决这个问题。然后程序运行没有问题。

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

汤姆

答案 1 :(得分:0)

我不是100%确定我遇到了你的问题。

查看方法名称。

setOnItemSelectedListener

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

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

举个例子:

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

如果你必须有两个不同的类来响应相同的OnItemSelected,那可能会有点丑陋。