我正在开发一个Android应用程序,我有一个自定义GUI组件,它扩展了TextView。
我希望我的自定义控件在从我的自定义控件类和我的重写的onclick方法中单击时执行任务。
例如,扩展TextView的类实现了OnClick侦听器并将日志写入日志cat。
然后在我的活动中,我将一个onclick监听器设置为我的自定义控件,这显示了一个Toast通知。
我想要发生的是,当我点击我的自定义控件时,我的活动被覆盖onclick显示toast并且click方法上的自定义控件类也会运行以显示日志。但是我似乎只能得到一个工作或者另一个,例如,如果我不运行myCustom.setOnClickListener(myListener)然后使用类onclick并执行日志,如果我设置onClick监听器然后我只得到吐司而不是日志。
以下是我的自定义控件类
public class NavTextView extends TextView implements View.OnClickListener
{
public NavTextView(Context context) {
super(context);
setOnClickListener(this);
}
public NavTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setOnClickListener(this);
}
public NavTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setOnClickListener(this);
}
public NavTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
setOnClickListener(this);
}
@Override
public void onClick(View v) {
Log.d("NavTextView", "This has been clicked");
}
}
以下是我关于创建方法的活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navTextView = (NavTextView)findViewById(R.id.navTextView);
navTextView.setOnClickListener(mClickListener);
}
希望这是有道理的
答案 0 :(得分:6)
View
只能有一个OnClickListener
。在你的NavTextView
中,你将它设置在那里。如果您稍后再次呼叫setOnClickListener
,则表示您正在替换之前的侦听器。
您可以执行的操作是覆盖自定义setOnClickListener
中的View
,然后换行OnClickListener
并同时调用它们。
public class MyTextView extends TextView implements View.OnClickListener
{
OnClickListener _wrappedOnClickListener;
public MyTextView(Context context) {
super(context);
super.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.d("NavTextView", "This has been clicked");
if (_wrappedOnClickListener != null)
_wrappedOnClickListener.onClick(view);
}
@Override
public void setOnClickListener(OnClickListener l) {
_wrappedOnClickListener = l;
}
}