Сбой при запуске при нажатии кнопки

#java #android #android-button

#java #Android #android-кнопка

Вопрос:

Такая же проблема. Кнопка инициализируется в нужное время, но по какой-то причине она вылетает при нажатии. В XML-файле указано, что обработчик onClick пропускает соответствующую активность.

xml

 <Button
    android:id="@ id/start_reg_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="216dp"
    android:onClick="onClick"
    android:text="@string/need_a_new_account" />
 

Java

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);

    mRegBtn = (Button) findViewById(R.id.start_reg_btn);

    mRegBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent reg_intent = new Intent(StartActivity.this, RegisterActivity.class);
            startActivity(reg_intent);
        }
    });
}
 

Очень новый для программирования на Android. Любая помощь приветствуется

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

1. убедитесь, что в XML-файле R.layout.activity.start есть эта кнопка.

2. Это делает xml-код, который я опубликовал, из acitvity_start.xml файл

3. может быть из-за android: onClick=»onClick», и вы не создали этот метод в своей деятельности, поэтому попробуйте после удаления этой строки.

Ответ №1:

Существует два способа решения вашей проблемы:

  1. Когда вы объявляете обработчик onClick в своем XML, вам необходимо реализовать метод в своей деятельности.

В вашем случае вы объявили обработчик onClick для вашей кнопки в XML с помощью этой строки:

  android:onClick="onClick"
 

Итак, теперь вам нужно создать имя метода onClick() в вашем activity и выполнить там свой код следующим образом:

 public void onClick(View v) {
  Intent reg_intent = new Intent( StartActivity.this, RegisterActivity.class);
  startActivity(reg_intent);
}
 
  1. Удалите эту строку из вашего XML:
  android:onClick="onClick"
 

и сделайте то, что вы уже сделали:

 mRegBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent reg_intent = new Intent( StartActivity.this, RegisterActivity.class);
                startActivity(reg_intent);
            }
        });
 

Итак, основная концепция заключается в том, что вы не можете использовать android:onClick and setOnClickListener вместе. Вы должны использовать по одному за раз.

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

1. Я удалил атрибут android: onClick =»onClick» из кнопки в файле xml, но он по-прежнему выходит из строя при нажатии

Ответ №2:

 android:onClick and `setOnClickListener` can not used simultaneous.
 

Чтобы правильно использовать android: onClick, вы можете обратиться к официальной ссылке

Ответ №3:

Попробуйте получить текущий контекст с помощью getContext() и реализовать как.

 public void onClick(View v) {
    Intent reg_intent = new Intent(v.getContext(), RegisterActivity.class);
    v.getContext().startActivity(reg_intent);
}
 

И либо определите onClick из XML-файла, либо определите его программно с помощью View.setOnClickListener . Оба не могут сосуществовать.

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

1. удален android: onClick=»onClick», чтобы они не сосуществовали, но он все равно вылетает при нажатии. Я перестраиваю перед запуском, и он все равно выходит из строя при нажатии этой кнопки

Ответ №4:

Обнаружена ошибка, связанная с тем, что TextEditinput != TextInputLayout и именно поэтому он зависал. Он также работал либо с помощью метода onClick, либо с помощью SetuponClickListener, поэтому спасибо всем за их помощь