2014-11-20 35 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