одновременная настройка нескольких кнопок

#android #button

#Android #кнопка

Вопрос:

Итак, я пытаюсь создать калькулятор (первое приложение), но вместо того, чтобы настраивать каждую кнопку отдельно, можно ли сделать их все сразу?

вот как это настраивается сейчас:

 final Button button1 = (Button) findViewById(R.id.button1);

button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (decimal == true) {
                String onScr = String.valueOf(firstTextView.getText());
                onScr = onScr   1;
                firstTextView.setText(onScr);
                CurrentVal = 0.1;
            }
            else {
                if (CurrentVal == 0) {
                    firstTextView.setText("1");
                    CurrentVal  ;
                } else {
                    String onScr = String.valueOf(firstTextView.getText());
                    onScr = onScr   1;
                    firstTextView.setText(onScr);
                }
            }
        }
    });
  

Мне удалось заставить его работать, но я хочу сжать код.

Ответ №1:

 public class MainActivity extends Activity implements OnClickListener {

Button Btn1, Btn2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    Btn1 = (Button) findViewById(R.id.btn1);
    Btn2 = (Button) findViewById(R.id.btn2);
    Btn1.setOnClickListener(this);
    Btn2.setOnClickListener(this);

}


@Override
public void onClick(View v) {

switch (v.getId()) {
        case R.id.btn1:
            Log.i("myTag", "Button1 Clicked");
            break;
        case R.id.btn2:
            Log.i("myTag", "Button2 Clicked");
            break;
}

}
  

Комментарии:

1. Вы не можете объявлять члены вне области видимости класса.

Ответ №2:

Вы можете implement View.OnClickListener ввести свой Activity (или Fragment ), а затем передать его как свой Listener при настройке Buttons .

Это позволит вам сжать код обработки кликов и очистить часть назначения кнопок. Гораздо более аккуратный код и проще в обслуживании.

 public class MyActivity extends Activity implements View.OnClickListener
{
    private Button button1;
    private Button button2;

    @Override
    public void onCreate(Bundle b)
    {
        super.onCreate(b);
        setContentView(R.layout.your_layout);
        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        // since your Activity implements View.OnClickListener
        //   you can pass it as an argument here.
        button1.setOnClickListener(this)
        button2.setOnClickListener(this)
    }

    @Override
    public void onClick(View v)
    {
        // get the clicked view's Id and act accordingly
        switch (v.getId())
        {
            case R.id.button1:
                clickedButton1();
                break;
            case R.id.button2:
                clickedButton2();
                break;
            // if you didn't set up a 'case' for a received click, log it
            default:
                Log.e(TAG, "Unhandled button press!");
                break;
        }
    }

    // if your code is moderately long you can
    //   move it outside of your onClick() too

    private void clickedButton1()
    {
        // do something
    }

    private void clickedButton2()
    {
        // do something else
    }
}
  

Ответ №3:

Вот как я это делаю. Это не совсем то, что вы просили, но вы можете изменить его в соответствии с вашими потребностями. Он работает с цифровыми кнопками. Вам нужно написать больше onClickListeners для других кнопок. Здесь resultString — это EditText.

 private ArrayList<Integer> calculatorButtonList;

calculatorButtonList = new ArrayList<Integer>();
calculatorButtonList.add(R.id.button0);
calculatorButtonList.add(R.id.button1);
calculatorButtonList.add(R.id.button2);
calculatorButtonList.add(R.id.button3);
calculatorButtonList.add(R.id.button4);
calculatorButtonList.add(R.id.button5);
calculatorButtonList.add(R.id.button6);
calculatorButtonList.add(R.id.button7);
calculatorButtonList.add(R.id.button8);
calculatorButtonList.add(R.id.button9);

for(int i=0; i<calculatorButtonList.size(); i  ) {
  final String buttonText = ((Button) findViewById(calculatorButtonList.get(i))).getText().toString();
  ((Button) findViewById(calculatorButtonList.get(i))).setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
      // TODO Auto-generated method stub
      resultString.setText(resultString.getText().append(buttonText));
      resultString.setSelection(pairingKey.getText().length());
    }
  });
}