2011-04-13 10 views
7

Düzen XML dosyamda 16 Button s (sayı, artı, eksi vb.) Var.Birden çok Düğme ve OnClickListeners hakkında nasıl gidebilirim

Hangi düğmeye basıldığını nasıl kontrol edeceğimi merak ediyorum.

Benim fikrim şu ki, her bir düğme için onClick() yöntemini kullanacağım, ancak bu yöntem biraz pratik değildir, çünkü her Düğme için bu onClick() yönteminden 16'sı olacaktır.

Daha şık bir yol var mı?

+0

http://stackoverflow.com/questions/3795439/one-onclickhandler-for-multiple-buttons – Vivart

cevap

2

Tıklama dinleyicilerinde 16'dan bahsetmek zorunda değilsiniz. Bir tane oluşturun ve her bir düğmeye ekleyin. onClick() yöntemi, bir görünümü parametre olarak alır. Bu görüş senin düğmen. Sadece kimliğini veya ismini kontrol et.

6

Adsız iç sınıf olarak tanımlamadığınız bir işleyiciyi, ancak ayrı bir sınıfta kullanabilirsiniz. onClick(), görünüm iletilir ve ondan seçim yapabilirsiniz.

public class MyActivity implements OnClickListener { 
    public void onClick(View v) { 
     Button b = (Button)v; 
     // do what you want 
    } 

    ... 
} 

ve sonra Layout.xml sadece

<Button android:id=".." 
     android:onClick="onClick" 
4

Tabii her düğme için koydu. button-ids'unuzun bir dizisini oluşturun ve bir döngüde aynı dinleyiciyi (View.OnClickListener - anonim sınıf olarak değil, ayrı sınıf olarak tanımlanan bir uygulama) atayın. Dinleyicide, basılan düğmenin hangisi olduğunu kontrol edebilirsiniz (onClick() yönteminde view parametresini karşılaştırarak). onClick yöntemde

MyOnClickListener myListener = new MyOnClickListener(); 
for (int id : buttonIdArray) 
    ((Button)findViewById(id)).setOnClickListener(myListener); 

: etkinlikte

Isterseniz OnClickListener uygulayan veya etkinlik sınıfında içinde tek sınıfta hepsini başa çıkabilirim

int id = view.getId(); 
switch (id) 
{ 
case ...: 
// Do stuff 
case ...: 
// Do different stuff 
} 
19

.. .

import android.view.View.OnClickListener; 

    public class MyActivity extends Activity implements OnClickListener { 

     @Override public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Button buttonA = (Button) findViewById(R.id.buttonA);  
     buttonA.setOnClickListener(this); 
     Button buttonB = (Button) findViewById(R.id.buttonB); 
     buttonB.setOnClickListener(this); 
     } 

    //etc... etc... 

    public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.buttonA: 
      // do something 
      break; 
     case R.id.buttonB: 
      // do something else 
      break; 
     } 
    } 

} 
+0

'un olası kopyası. İpuçlarınız için teşekkürler. @ user433579'u nasıl göstermeyi denedim, ancak hala uygulamamı emülatör hatasıyla çalıştırdıktan sonra "Üzgünüm! - Bu uygulama CALC (process com.tsk.calc) beklenmedik bir şekilde durdu. Lütfen tekrar deneyin." Sorun nerede olabilir? Günlük hataları veya benzeri bir şey için bir dosya var mı? – user1946705

2
import android.view.View.OnClickListener; 

public class MyActivity extends Activity implements OnClickListener { 

    @Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button buttonA = (Button) findViewById(R.id.buttonA);  
    Button buttonB = (Button) findViewById(R.id.buttonB); 
    buttonA.setOnClickListener(this); 
    buttonB.setOnClickListener(this); 
    } 

    public void onClick(View v) { 
    if(v==buttonA) 
    { 
     do something... 
    } 
    if(v==buttonB) 
    { 
     do something... 
    } 
} 
0
@Override 
public boolean onTouch(View v, MotionEvent event) 
{ 
    Button thisButton = (Button) v; 


    switch (event.ACTION_DOWN) 
    { 
     case MotionEvent.ACTION_DOWN: 
      for (int i = 0; i < _button.length;i++) 

       if (tagOf(thisButton) == tagOf(_button[i])) 
       { 
        System.out.println("Button " + i + " pressed!"); 
        _textView[i].setText(String.valueOf(_settingBrowser.countUpPosition(i))); 
       } 
    } 
    return false; 
} 


int tagOf (Button b) 
{ 
    return Integer.parseInt(b.getTag().toString()); 
} 

böyle ana sınıfta kimlik numarası olan düğmeler başlatılıyor: sizin gibi düğmelerin büyük bir sayı varsa

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    _button = new Button[FIELDS]; 


     _button[0] = (Button) findViewById(R.id.Button01); 
     _button[1] = (Button) findViewById(R.id.Button02); 
     _button[2] = (Button) findViewById(R.id.Button03); 
     _button[3] = (Button) findViewById(R.id.Button04); 
     _button[4] = (Button) findViewById(R.id.Button05); 
     _button[5] = (Button) findViewById(R.id.Button06); 


     _padListener = new SettingButtonListener(_button); 

     for (int j = 0; j < _button.length; j++){ 
      _button[j].setTag(j); 
      _button[j].setOnTouchListener(_padListener); 

     } 
} 

Bu düzgünGenellikle böyle bir şey yapmak hepsi için aynı dinleyiciyi kullanmak ve kullanmak istiyorum. Şerefe!

İlgili konular