2016-07-30 7 views
1

Ich versuche, einige Tasten (Zifferntasten {0, 1, ..., 9}) so, wie ich das, ist dies tat zu erstellen: wie Tasten zu schaffen, mit dem fast gleicher Arbeit

button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(getNumber.getText().toString().length()>=2) 
       return; 
      getNumber.setText(getNumber.getText().toString() + "1"); 
     } 
    }); 

    button2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(getNumber.getText().toString().length()>=2) 
       return; 
      getNumber.setText(getNumber.getText().toString() + "2"); 
     } 
    }); 

    button3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(getNumber.getText().toString().length()>=2) 
       return; 
      getNumber.setText(getNumber.getText().toString() + "3"); 
     } 
    }); 

    and so on ... 

Gibt es einen besseren Weg dies zu tun und zu verhindern, dass man dieselben Dinge schreibt?

+0

überprüfen Sie diesen Thread http://stackoverflow.com/questions/31891481/using-a-loop-to-set-the-buttons-onclicklistener –

Antwort

2

Sie können die folgende Methode haben:

private void setupButton(int btnId, int num) { 
    Button btn = (Button) findViewById(btnId) 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(getNumber.getText().toString().length() >= num) 
       return; 
      getNumber.setText(getNumber.getText().toString() + num); 
     } 
    }); 
} 

Wir die Schaltfläche Ressourcen-ID übergeben und die entsprechende Anzahl an diese Methode für jede Taste.

3

Sie können den Code sauberer machen, indem Sie:

button1.setOnClickListener(this); 
button2.setOnClickListener(this); 
button3.setOnClickListener(this); 
button4.setOnClickListener(this); 
button5.setOnClickListener(this); 
//.. 

.

Jetzt:

@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
    { 
     case button1: 
      doSomeTask(getNumber.getText().toString(), "1"); 
      break; 
     case button2: 
      doSomeTask(getNumber.getText().toString(), "2"); 
      break; 
     //... 
    } 
} 

Jetzt die doSomeTask():

private void doSomeTask(String text, String num) { 
    if(text.length()>=2) 
     return; 
    getNumber.setText(text + num); 
} 
1

Variable auf jeder Taste wie button1.Tag = 1;button2.Tag = 2; und so weiter. und wenn im Layout android:tag="1" für jede Schaltfläche.

von @oneStepBack

button1.setOnClickListener(this); 
button2.setOnClickListener(this); 
button3.setOnClickListener(this); 
button4.setOnClickListener(this); 
button5.setOnClickListener(this); 
//.. 

Aktivität Code:

@Override 
public void onClick(View v) 
{ 
    doSomeTask(getNumber.getText().toString(), v.getTag()); 
} 

doSomeTask von oneStepBack

private void doSomeTask(String text, String num) { 
    if(text.length()>=2) 
     return; 
    getNumber.setText(text + num); 
} 

Das ist die Praxis, dass ich für mehrere Taste wi folgen Das gleiche Merkmal!