#java #android
#java #Android
Вопрос:
Я уже пытался найти в Google информацию о том, как переключать действия в Android Studio, даже в официальной документации с руководством. Я сделал это точно так, как было сказано, но я все еще не могу перенаправиться на другое действие после нажатия кнопки.
Я ввел onClick имя метода для кнопки
это выглядит так: https://i.imgur.com/pmsztaL.png (пока не могу публиковать изображения)
и это мой MainActivity.class файл с указанным способом
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void handleButtonAddNew(View view) {
MainActivity.this.startActivity(new Intent(MainActivity.this, AddItemActivity.class));
}
}
После нажатия кнопки в телефоне кнопка ничего не делает.
Это мой AddItemActivity.class
public class AddItemActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_item);
}
public void handleButtonRemember(View view) {
finish();
}
}
Почему кнопка не работает, что я сделал не так?
ПРАВКИ
РЕДАКТИРОВАТЬ: успешно запущен эмулятор, и кнопки действительно сработали, проблема заключается в моем телефоне, кнопки там не хотят работать. Где может быть проблема сейчас?
РЕДАКТИРОВАТЬ: XML-макет MainActivity.class
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@ id/buttonAddNew"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="188dp"
android:layout_marginRight="188dp"
android:layout_marginBottom="264dp"
android:text="@string/buttonAdd"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ScrollView
android:id="@ id/scrollView2"
android:layout_width="395dp"
android:layout_height="715dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
</android.support.constraint.ConstraintLayout>
РЕДАКТИРОВАТЬ: проблема заключалась в том, что просмотр прокрутки блокировал интерактивную кнопку, поэтому на моем телефоне кнопка не регистрировала никаких нажатий, после удаления scrollview кнопка работает нормально.
Комментарии:
1. Поместите журнал внутри handleButtonAddNew, посмотрите, вызывается ли ваш метод
2. Попробуйте удалить представление из параметров вашего метода, поскольку оно не используется. Кроме того, вы можете попробовать привязать свои представления и программно установить OnClickListener к вашей кнопке, которая вместо этого запускает действие. По крайней мере, таким образом, это сделало бы отладку более очевидной.
3. @NikosHidalgo если onClick зарегистрирован в XML, а не программно, что, по-видимому, имеет место, в качестве параметра требуется представление.
4. Зарегистрировано ли ваше новое действие в файле манифеста приложения?
5. Возможно, вы захотите включить свой activity_main.xml досье.
Ответ №1:
Я боюсь, что к этой кнопке не подключаются никакие слушатели.
Программный подход
Из официальной документации Android
Я бы посоветовал вам использовать это при обратном onCreate
вызове:
Button button = (Button) findViewById(R.id.your_btn_id);
button.setOnClickListener((view) -> { theMethodYouWantToCallHere(view); });
Подход XML
Пожалуйста, дважды проверьте следующее, используя этот подход
- Ваша активность зарегистрирована в
AndroidManifest.xml
- Вы включаете
android
пространство имен в файл XML в родительском контейнере файла макета. IE:xmlns:android="http://schemas.android.com/apk/res/android"
- Убедитесь, что вы настраиваете представление содержимого для действия с помощью
setContentView(R.layout.your_layout_file);
- Как только 2 будет выполнено, убедитесь, что вы используете
android
пространство имен. IE:android:onClick="yourMethod"
- Как вы сейчас делаете: убедитесь
onClick
, что метод обратного вызова имеетView view
параметр; ни больше, ни меньше - Убедитесь
onClick
, что функцияpublic
включена в действие. - И что никакие другие интерактивные представления не охватывают представление, для которого вы регистрируете
onClick
слушателя 🙂 Включая пространство имен:xmlns:android="http://schemas.android.com/apk/res/android"
XML-файл
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button android:text="Click me!" android:onClick="clicked" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
</FrameLayout>
Действие
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void clicked(View view){
Toast.makeText(this, "Hey! Im clicked!",Toast.LENGTH_SHORT).show();
}
}
Комментарии:
1. Попробовал программный подход, эмулятор работает как надо, активность переключается, однако мой телефон не регистрирует клики. Анимация даже не показывает, что кнопка нажата, как только я нажимаю кнопку пальцем.
2. Скриншот макета внутри эмулятора также может оказать некоторую помощь
3.Создание внутреннего дизайна Внутри эмулятора
4. Я думаю, что кнопка может быть слишком маленькой на реальном устройстве и / или
ScrollView
находится поверхButton
и перехватывать события щелчка. Попробуйте отладить его с<ScrollView android:visibility="gone" ...
помощью и посмотрите, работает ли он5. Да, ScrollView блокировал вид кнопки, теперь это работает, спасибо!