Mohammad Mahdi
Mohammad Mahdi

Reputation: 17

how to create buttons with almost same work

I'm trying to create some buttons (number buttons {0, 1, ..., 9}) the way I did that, is this:

 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 ...

is there any better way to do this and prevent of writing the same things ?

Upvotes: 1

Views: 58

Answers (3)

Smit
Smit

Reputation: 2138

set tag to every button like button1.Tag = 1; button2.Tag = 2; and so on. and if in layout android:tag="1" for every button.

from @oneStepBack

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

Activity Code:

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

doSomeTask from oneStepBack

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

That's the practice that i follow for multiple button with same feature!

Upvotes: 1

Nongthonbam Tonthoi
Nongthonbam Tonthoi

Reputation: 12953

You can make your code cleaner by doing:

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

.

Now:

@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;
       //...
    }
}

Now the doSomeTask():

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

Upvotes: 3

Shaishav
Shaishav

Reputation: 5312

You can have the following method:

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); 
        } 
    }); 
}

We pass the button resource ID and the corresponding number to this method for each button.

Upvotes: 2

Related Questions