2013-04-12 4 views
-1

Как создать единый клик для нескольких кнопок, которые создаются динамически? Это мой код.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

Где ваши динамически созданные кнопки «Кнопки»? – codeMagic

+1

всего дубликата (также, я не вижу актуальности кода) – njzk2

ответ

3

Вы можете создать внутренний класс, который реализует View.OnClickLister, а затем вы можете установить его на каждой кнопке вас:

Давайте создадим глобальный объект просто сделать @ njzk2 счастливым:

private ClickListener mySingleListener = new ClickListener(); 

И давайте установим этот единственный слушатель ко всем кнопкам нас:

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

И ваш ClickList Шенер класс:

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> 

Я ваша деятельность Metod 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

«кнопки, которые созданы динамически?», 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

Смежные вопросы