2014-11-20 36 views
0

我在按钮上使用了一个非常类似的代码片段setOnClickListener,并且视图已通过。无法访问开关内部的视图android

((Switch) convertView.findViewById(R.id.push_switch)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
    if(rowItem.getPush().equals("N")){ 
     ((Switch) convertView.findViewById(R.id.push_switch)).toggle(); 
     rowItem.setPush("Y"); 
    } 
    else if(rowItem.getPush().equals("Y")){ 
     ((Switch) convertView.findViewById(R.id.push_switch)).toggle(); 
     rowItem.setPush("N"); 
    } 
    } 
}); 

在上面的代码,查看有没有通过,所以我怎么能访问它传递到哪里改我已经把convertView

对这个问题不重要的一个侧面查询是为什么当这没有发生在按钮上时,第一行被转换为(Switch)。只是对那个感兴趣!

谢谢:)

+0

“...的观点并没有通过......通过” - 'compoundButton'是交换机。 – 2014-11-20 16:25:19

+0

我以前从未使用复合按钮,所以我可能会误解它是什么。如果我有一个开关,我需要在它改变的状态下激活一个回调。我会用我必须做的吗?因为我需要访问这个父级内的开关吗? – sark9012 2014-11-20 16:27:35

+0

'CompoundButton'是'Switch'类的基类。在侦听器方法中,将'compoundButton'强制转换为'Switch',而不是在'convertView'上尝试'findViewById()'。这将是接收事件的'Switch'对象。 – 2014-11-20 16:30:44

回答

1

由于@Mike中号评论说,compoundButton是交换机。回调方法onCheckedChanged正在向您传递引发回调的CompoundButton的引用......在这种情况下,您的Switch。

你可以这样做:

compoundButton.toggle(); 
+0

现在看来,这已经阻止了我转换位置!它现在停了下来! – sark9012 2014-11-20 16:35:02

+0

你可能不想切换它 - 我只是跟着你的代码。从逻辑上讲,你的代码说的是“当切换开关切换回去” – 2014-11-20 16:38:47

+0

是的,我刚刚通过它进行调试,并意识到我不需要它切换,因为用户正在自己切换它!不管怎么说,还是要谢谢你! – sark9012 2014-11-20 16:40:31