So, my problem is that OnClickListener
doesn't work when I set android:clickable="true"
into my class.
This is MyClass
xml code:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/background"
android:clickable="true">
...
...
</RelativeLayout>
MyClass.java:
public class MyClass extends RelativeLayout implements OnClickListener {
public MyClass(Context context) {
super(context);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.book_item, this);
setOnClickListener(this);
}
public void onClick(View v) {
Log.v("TAG", "Hello");
}
...
...
}
It works fine when I set android:clickable
to false. What do I wrong?
You can use this way too.
Add id to your layout:
Then in java code:
Setting an
OnClickListener
will automatically set the clickable property to true. The code you are showing is confusing though. My understanding is that yourMyClass
view is the parent of theRelativeLayout
shown in the XML file.If so, the child
RelativeLayout
will get the touch events first (since it's clickable) but won't do anything with them since it doesn't have a click listener.Just remove
clickable=true
from your XML.when you do this:
android:clickable="true"
you disable theonClickListener
(its not logical but its like that..).So set it to
"false"
or just remove this line from your XML file ;)