在自定义小部件中自定义onClickListner - 如何?
我有一个定制的小部件,它扩展了线性布局。 它只是利用litle的文本块。在自定义小部件中自定义onClickListner - 如何?
这里是小工具的XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:background="@drawable/actionbar_background"
android:layout_height="35dp"
android:paddingLeft="15dp"
android:gravity="center_vertical">
<TextView
android:id="@+id/title"
android:layout_height="35dp"
android:textColor="@color/white"
android:layout_width="match_parent"
android:textSize="18dp"
android:clickable="true"
android:gravity="center_vertical" />
</LinearLayout>
<TextView
android:id="@+id/ingreds"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="Some text"
android:paddingLeft="15dp" />
</LinearLayout>
如果我创造onClickListener
为自定义部件在Activity
的地方 - 它只有当我在布局点击最后TextView
反应。但我需要设置onClickListener水平LinearLayout
其中包含“title”textView,或直接在标题TextView上。 重要提示:我想要设置这些听众OUTSIDE自定义控件类。
我认为我需要覆盖setOnclickListener
方法在我的自定义类或类似的东西,但我不知道它是如何做到的。
这里是类自定义部件的:
public class MyTextBlock extends LinearLayout {
private TextView title;
private TextView ingreds;
public MyTextBlock(Context context) {
this(context, null);
}
public MyTextBlock(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_text_block, this, true);
title = (TextView) findViewById(R.id.title);
ingreds = (TextView) findViewById(R.id.ingreds);
}
public void setText(String text) {
ingreds.setText(text);
}
public void setTitle(String titleText) {
title.setText(titleText);
}
}
谢谢回答。
只需实现OnClickListener这个视图类,并设置textview.setOnClickLister(this);
现在处理下onClick(View v)
方法click事件。
你能提供我示例代码吗?我以前从未创建过自定义小部件,所以我不完全了解您。谢谢。 – udenfox 2014-09-03 16:37:25
好的,我做到了。但这不是我想要做的。 我可以处理点击textview里面的视图类,但我需要处理它在外面。例如:我在MainActivity中创建新的MyTextBlock对象。所以我需要处理来自MainActivity的textView(它是在自定义View类中)的点击。 – udenfox 2014-09-04 13:06:17
好吧,不仅仅是在初始化自定义视图并将其设置为textview时从主活动类传递onClickListener,现在,对textview的点击将捕获到主活动类的onClick(View v)方法下。 – 2014-09-04 15:40:14
MyTextBlock textviewCustom = ....
textviewCustom.setonclickListner(MainClass.this);
public class MyTextBlock extends LinearLayout {
private TextView title;
private TextView ingreds;
public MyTextBlock(Context context) {
this(context, null);
}
public MyTextBlock(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_text_block, this, true);
title = (TextView) findViewById(R.id.title);
ingreds = (TextView) findViewById(R.id.ingreds);
}
public void setonclickListner(OnclickListner listner)
{
title.setonclicklistner(listner);
ingreds.setonclicklistner(listner);
}
public void setText(String text) {
ingreds.setText(text);
}
public void setTitle(String titleText) {
title.setText(titleText);
}
}
这似乎没有工作。 OnClick仍然处理点击成分TextView,而不是标题(在SetOnclickListener方法中,我删除了“ingreds.setonclicklistner(listner);”一行) – udenfox 2014-09-03 16:38:57
所以我通过创建自定义事件侦听器来解决这个问题。 http://stackoverflow.com/questions/8292712/android-custom-event-listener/8293106#8293106 – udenfox 2014-09-04 13:24:05