2012-12-30 107 views
1

說我有一個動態創建按鈕:動態按鈕和OnClickListener

for(int j = 0; j < spirits.length; 

    j++){ 
         Button imgBtn = new Button(v.getContext()); 
         imgBtn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
         imgBtn.setMinimumWidth(100); 
         imgBtn.setMinimumHeight(100); 
         imgBtn.setId(j+1); 
         imgBtn.setTag(spirits[j]); 
         imgBtn.setText(spirits[j]); 
         imgBtn.setOnClickListener(new SpiritsClickListener()); 
         cabinet_layout.addView(imgBtn); 
        } 

我想每一個它的壓制(開 - 關)時更改按鈕上的文字 如何可以引用內的按鈕OnClickListener類?

+0

似乎你可能需要一個基於你的問題的切換按鈕。對? – Kanth

+0

這是一種測試代碼。最終他們將成爲圖像按鈕,我希望能夠更改圖像 –

+0

您可以通過將每個按鈕初始化爲false來使用標誌。當用戶點擊它時,根據前一個標誌的狀態將該標誌設置爲反轉(true或false)。 – Kanth

回答

1

在你的onClickListener中,你有一個名爲onClick(View v){}的函數,其中v是被單擊的視圖。您可以使用v獲取有關該按鈕的詳細信息,包括其ID。你也可以使用這個視圖,如果你知道它是一個按鈕,將它轉換爲一個按鈕。

Button clicked = (Button)v; 

然後,您可以在您的javacode中使用它,就像您通常使用按鈕一樣。

0

爲什麼你不只是調用new OnClickListener()該循環這樣

for(int j = 0; j < spirits.length;j++){ 
    Button imgBtn = new Button(v.getContext()); 
    imgBtn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    imgBtn.setMinimumWidth(100); 
    imgBtn.setMinimumHeight(100); 
    imgBtn.setId(j+1); 
    imgBtn.setTag(spirits[j]); 
    imgBtn.setText(spirits[j]); 
    imgBtn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //do what you need to do here 
     } 
    }); 
    cabinet_layout.addView(imgBtn); 
} 
0

中動態創建的按鈕作爲創建OnClickListener

// Create Listener for Button 
    private OnClickListener SpiritsClickListener = new OnClickListener() 
    { 
     @Override 
     public void onClick(View view) { 
      // TODO Auto-generated method stub 
      Button btn = (Button) view; 
      String btnText = btn.getText(); 

      if(btnText.equalsIgnoreCase("On")){ 
       btn.setText("Off"); 
      }else{ 
       btn.setText("On"); 
      } 
     } 
    }; 

添加此監聽到動態創建的按鈕爲:

imgBtn.setOnClickListener(SpiritsClickListener);