如何使用几乎相同的工作创建按钮

时间:2016-07-30 13:58:17

标签: android

我试图创建一些按钮(数字按钮{0,1,...,9}) 我这样做的方式是:

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

有没有更好的方法来做到这一点,并防止写同样的事情?

3 个答案:

答案 0 :(得分:3)

您可以通过以下方式使代码更清晰:

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

现在:

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

现在是doSomeTask()

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

答案 1 :(得分:2)

您可以使用以下方法:

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

我们将按钮资源ID和相应的数字传递给每个按钮的此方法。

答案 2 :(得分:1)

将标记设置为button1.Tag = 1; button2.Tag = 2;等每个按钮,依此类推。如果在每个按钮的布局android:tag="1"中。

来自@oneStepBack

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

活动代码:

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

doSomeTask

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

这是我遵循的具有相同功能的多个按钮的做法!