2009-10-31 38 views
4

onClick絕不會觸發!爲什麼不?請幫幫我。Android動態創建按鈕:setOnClickListener不起作用

for(int i = 0; i < 12; i++) { 
    String title = "Button" + i; 
    Button sliderButton = new Button(this); 
    sliderButton.setText(title); 
    glideMenuTray.addView(sliderButton,100,40); 

    sliderButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Log.d("gm", "Tapped "); 
     } 
    }); 
} 
+0

我懷疑它將使任何差別,但你有沒有打過電話'glideMenuTray.addView()'前加上'OnClickListener'? – 2009-10-31 12:46:28

回答

0

如果您正在使用甜甜圈或巧克力慕斯蛋糕,你可以使用常見的點擊監聽器,在您的活動登記並與佈局XML您的按鈕大呼過癮。

僅供參考,外觀here,類別更容易點擊聽衆

+0

我不認爲簡單的點擊偵聽器的方法將工作,因爲他的按鈕是動態的,沒有預先定義在XML中。 – Konklone 2009-10-31 17:14:14

2

我不是這方面的專家,但它可能與垃圾收集有關,並且OnClickListeners超出範圍。

儘管我不認爲你可以使用超級簡單的方法來測試Dimitar提到的onClickListeners,但你可以使用他鏈接部分討論的中間方法,即使它不是一種新方法。在這裏重複的代碼示例,它是:

View.OnClickListener handler = View.OnClickListener() { 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.myButton: // doStuff 
       break; 
      case R.id.myOtherButton: // doStuff 
       break; 
     } 
    } 
} 

findViewById(R.id.myButton).setOnClickListener(handler); 
findViewById(R.id.myOtherButton).setOnClickListener(handler); 

如果區分按鈕的唯一的事情就是他們的標題文本,那麼,你可以使用在主的onClick方法來區分它們。

+0

東西不是垃圾收集,除非它無法通過任何GC根目錄。 OP的代碼創建了添加到glideMenuTray的按鈕,該按鈕可能是由某個可從gc根訪問的事物(例如Activity)引用的,因此垃圾收集參數沒有意義。 – gardarh 2012-10-01 09:35:03

2

而且,不舒爾,我曾經對一個TextView這樣一個問題,那是因爲我沒有加入setClickable(true)

我的代碼是像

TextView text = new TextView(this); 
text.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
text.setText("***"); 
text.setClickable(true); 

text.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     //My action 
    } 
}); 

myViewGroup.addView(text); 

希望這有助於

0

我正確地假設以下行:

glideMenuTray.addView(sliderButton,100,40); 

添加s視圖到座標x:100,y:40到一些視圖擴展ViewGroup?

在這種情況下,您將12個按鈕堆疊在一起,只有最後一個Button(標記爲Button11)將可見(並且可點擊)。

,並規定,問題是3歲的我真希望現在你已解決了這個:)

0

設置setOnClickListener添加視圖之前。

for(int i = 0; i < 12; i++) { 
    String title = "Button" + i; 
    Button sliderButton = new Button(this); 
    sliderButton.setText(title); 
    sliderButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Log.d("gm", "Tapped "); 
     } 
    glideMenuTray.addView(sliderButton,100,40); 
}