onClickListener вызывает сбой приложения
У меня проблема с методом onClickListener. Когда это называется сбой приложения. Я искал решение, но, похоже, в моем коде есть все, что было сказано.
public class Sudoku extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sudoku);
View continue_button = findViewById(R.id.continue_button);
continue_button.setOnClickListener(this);
View new_button = findViewById(R.id.new_button);
new_button.setOnClickListener(this);
View about_button = findViewById(R.id.about_button);
about_button.setOnClickListener(this);
View exit_button = findViewById(R.id.exit_button);
exit_button.setOnClickListener(this);
}
// ...
public void onClick(View v)
{
switch (v.getId())
{
case R.id.about_button:
Intent i = new Intent(this, About.class);
startActivity(i);
break;
}
}
}
-
public class About extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
}
}
И основная деятельность:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/background"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="30dip"
tools:context=".Sudoku" >
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/main_tittle"
android:gravity="center"
android:textColor="@color/main_tittle"
android:textSize="25sp"
android:layout_marginBottom="25dip"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/continue_label" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/new_game_label" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/about_label" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/exit_label" />
</LinearLayout>
</LinearLayout>
Я очень новичок в программировании Android / Java, пожалуйста, простите.
3 ответа
Решение
Я не вижу ни одного идентификатора, объявленного для ваших кнопок в XML.
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/about_button"
android:text="@string/about_label" />
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="25dip"
android:gravity="center"
android:id="@+id/main_tittle"
android:textSize="25sp" />
<Button
android:id="@+id/continue_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/new_game_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/about_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/exit_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sudoku);
View continue_button = findViewById(R.id.continue_button); /// findviewbyid not by text String resource
continue_button.setOnClickListener(this);
View new_button = findViewById(R.id.new_button);
new_button.setOnClickListener(this);
View about_button = findViewById(R.id.about_button);
about_button.setOnClickListener(this);
View exit_button = findViewById(R.id.exit_button);
exit_button.setOnClickListener(this);
}
Если вы используете кнопку, то вы также используете вид
вы используете это
View continue_button = findViewById(R.id.continue_button);
continue_button.setOnClickListener(this);
View new_button = findViewById(R.id.new_button);
new_button.setOnClickListener(this);
View about_button = findViewById(R.id.about_button);
about_button.setOnClickListener(this);
View exit_button = findViewById(R.id.exit_button);
exit_button.setOnClickListener(this);
Так должно быть
Button continue_button = (Button)findViewById(R.id.continue_button);
continue_button.setOnClickListener(this);
Button new_button = (Button)findViewById(R.id.new_button);
new_button.setOnClickListener(this);
Button about_button =(Button) findViewById(R.id.about_button);
about_button.setOnClickListener(this);
Button exit_button =(Button) findViewById(R.id.exit_button);
exit_button.setOnClickListener(this);
у вас есть пост XML-файл в каждой кнопке добавить идентификатор атрибута, как это (в каждом теге кнопки)
<Button
android:id="@+id/continue_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/continue_label" />
<Button
android:id="@+id/new_button"
android:id="@+id/new_game_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/about_button"
android:id="@+id/about_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/exit_button"
android:id="@+id/exit_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />