2013-04-12 36 views
-1

我如何爲多個按鈕創建一個單一的點擊監聽器,它是以dynnamically創建的? 這是我的代碼。One ClickListener

int cn = myary.length; 
ScrollView sv = new ScrollView(this); 
TableLayout ll = new TableLayout(this); 
HorizontalScrollView hsv = new HorizontalScrollView(this); 
TableRow tbrow0 = new TableRow(this); 

    EditText tv0 = new EditText(this); 
    tv0.setText(""); 
    tbrow0.addView(tv0); 

    ll.addView(tbrow0); 
    int j = 0; 
    for (int i = 0; i < cn; i++) { 
     TableRow tbrow = new TableRow(this); 

     t1v = new Button(this); 
     t1v.setText(myary[i]); 
     t1v.setId(i+j); 
     tbrow.addView(t1v); 

     ll.addView(tbrow); 
    } 
    hsv.addView(ll); 
    sv.addView(hsv); 
    setContentView(sv); 
+2

你在哪裏動態創建'Buttons'? – codeMagic

+1

總重複(另外,我沒有看到代碼的相關性) – njzk2

回答

3

您可以創建一個實現View.OnClickLister一個內部類,然後你可以將其設置爲你的每一個按鈕:

讓我們創建一個全局對象只是爲了讓@ njzk2開心:

private ClickListener mySingleListener = new ClickListener(); 

而且我們這個單監聽器設置爲我們的所有按鈕:

t1v = new Button(this); 
t1v.setTag(i); 
t1v.setOnClickListener(mySingleListener); 

和你ClickList ENER類是:

private class ClickListener implements View.OnClickListener { 

    @Override 
    public void onClick(View v) { 
     int position = (Integer) v.getTag(); 
     // Do click event here 
    } 

} 
+0

與@Scelus相同的評論:沒有幫助,因爲在onClick你不知道哪個btn被點擊過。 – njzk2

+0

然後將標記設置爲按鈕並從onClick獲取標記...我更新我的答案 – yahya

+0

然後您不需要每次都有一個新的OnClickListener,您可以重複使用它。 – njzk2

0

例如你在主要佈局3個按鈕:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/my_switcher" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

<Button 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:id="@+id/btn1" 
     android:onClick="onClick" 
     /> 
<Button 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:id="@+id/btn2" 
     android:onClick="onClick" 
     /> 
<Button 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:id="@+id/btn3" 
     android:onClick="onClick" 
     /> 

</LinearLayout> 

我你的活動梅託德的onClick從三個按鍵處理事件。我們需要認識到按鈕已被按下。

public void onClick(View view) { // Parameter 'view' used 
    switch (view.getId()) 
    { 
     case (R.id.btn1): 
     { 
      Toast.makeText(this, "Hello Button_1 pressed", Toast.LENGTH_LONG).show(); 
      break; 
     } 
     case (R.id.btn2): 
     { 
      Toast.makeText(this, "Hello Button_2 pressed", Toast.LENGTH_LONG).show(); 
      break; 
     } 
     case (R.id.btn3): 
     { 
      Toast.makeText(this, "Hello Button_2 pressed", Toast.LENGTH_LONG).show(); 
      break; 
     } 
    } 

這是你如何使用「視圖」

+1

「按照dynnamically創建的按鈕」,OP想要以編程方式執行 – codeMagic

+0

那麼,你的肥大檢查[SO回答]( http://stackoverflow.com/a/4458450/1616443)。 – jimpanzer

+1

你的意思是我在我的原始評論中發佈並標記爲重複的人)?是。關鍵是,這並沒有回答手頭的問題 – codeMagic

1

創建一個實現View.OnClickListener

class MyClickListener implements View.OnClickListener{ 

    @Override 
    public void onClick(View v) { 
     // put here what the click should do 

    } 

} 

再附上從你的類的對象,以你的按鈕

一類一個例子
btn.setOnClickListener(new MyClickListener()); 
+0

沒有幫助,因爲在onClick你不知道哪個btn被點擊過。 – njzk2