Ошибка при попытке определить, какая кнопка нажата - PullRequest
0 голосов
/ 16 октября 2019

Будучи новичком в Android, я пытаюсь определить, какая кнопка нажимается, путем вывода "Hello" на эту кнопку, но при выполнении кода возникает ошибка.

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener  {

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {

        switch(v.getId())
        {
            case R.id.button1 :
                button1.setText("Hello");
                break;
            case R.id.button2 :
                button2.setText("Hello1");
                break;
            default:
                throw new RuntimeException("Unknown button ID");



        }

    }

}

Приведенный выше код возвращает следующую ошибку:

java.lang.RuntimeException: Невозможно создать экземпляр активности ...

Ответы [ 3 ]

2 голосов
/ 16 октября 2019

Проблема в атрибутах вашего класса:

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

Вы не можете вызвать findViewById до вызова setContentView в onCreate методе. Измените свой код:

Button button1;
Button button2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1 = findViewById(R.id.button1);
    button2 = findViewById(R.id.button2);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this);

}
0 голосов
/ 16 октября 2019

Вы должны создать экземпляр кнопки внутри метода onCreate следующим образом:

Button button1 ;
Button button2 ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button1 = findViewById(R.id.button1);
    button2 = findViewById(R.id.button2);

    button1.setOnClickListener(this);
    button2.setOnClickListener(this);

}

проблема заключалась в связывании кнопки с ее правильным viewId, поэтому эти viewIds находятся внутри activity_main макета, поэтомуfindViewById будет искать в этом макете эти viewIds, и все это будет сделано внутри метода onCreate

0 голосов
/ 16 октября 2019

Марка findViewById внутри onCreate:

Button button1, button2;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = findViewById(R.id.button1);
        button2 = findViewById(R.id.button2);
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...