Reputation: 933
I have seen that there's been some similar questions but the answers to those haven't helped me so far. The full error:
java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'button_random'
The class (StartActivity.java):
public class StartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
public void onClick(View v) {
Log.d("DEBUG", "CLICKED " + v.getId());
}
}
The XML (activity_start.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Random Game"
android:id="@+id/button_random"
android:layout_gravity="center_horizontal"
android:onClick="onClick" />
</LinearLayout>
I have added the activity to the AndroidManifest.xml. I have similar activities that work in the same way and I don't have any problems with those...
Does anyone see something where I am missing something or have made a mistake?
Upvotes: 11
Views: 27338
Reputation: 569
In my case I missed closing bracket at the end.
android:onClick="@{(v) -> CommentHandler.selectGallery(v)"
It should be like this.
android:onClick="@{(v) -> CommentHandler.selectGallery(v)}"
Upvotes: 14
Reputation: 1019
I had the same issue, in my case I have 2 activities using the same layout so when I changed the OnClick
event name it will crash in other activity try to check the setContentView
layout in the crashing activity
Upvotes: 1
Reputation: 322
Please rename onClick
method to anything other than that, Android thinks you are calling the internal onClick
from View.java
exposed via OnClickListener
interface
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Random Game"
android:id="@+id/button_random"
android:layout_gravity="center_horizontal"
android:onClick="myOnClick" />
and in your Activity
public class StartActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
public void myOnClick(View v) {
Log.d("DEBUG", "CLICKED " + v.getId());
}
}
You can check the View documentation here
Upvotes: 6
Reputation: 2601
You need to change android.support.v7.widget.AppCompatButton
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.AppCompatButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Random Game"
android:id="@+id/button_random"
android:layout_gravity="center_horizontal"
android:onClick="onClick" />
</LinearLayout>
Upvotes: 0
Reputation: 15573
I had the same problem and in my case, I changed Button
in XML to android.support.v7.widget.AppCompatButton
and it worked.
Code with Error:
<Button
.... />
Fixed Code:
<android.support.v7.widget.AppCompatButton
.... />
Upvotes: 3