gpt4 book ai didi

android - 使用覆盖 onclick 创建自定义控件

转载 作者:太空狗 更新时间:2023-10-29 16:16:10 26 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,我有一个扩展 TextView 的自定义 GUI 组件。

我想让我的自定义控件在从我的自定义控件类和重写的 onclick 方法中单击时执行任务。

例如,我扩展 TextView 的类实现了 OnClick 监听器并将日志写入日志猫。

然后在我的 Activity 中,我为我的自定义控件设置了一个 onclick 监听器,这会显示 toast 通知。

我想要发生的是,当我的自定义控件被单击时,我的 Activity 被重写 onclick 显示 toast 并且自定义控件类 on 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");
}
}

下面是我的 Activity onCreate方法

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

navTextView = (NavTextView)findViewById(R.id.navTextView);

navTextView.setOnClickListener(mClickListener);
}

希望这是有道理的

最佳答案

一个View只能有一个OnClickListener。在您的 NavTextView 中,您将其设置在那里。如果您稍后再次调用 setOnClickListener,您将替换之前的监听器。

您可以做的是在您的自定义 View 中覆盖 setOnClickListener,然后包装 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;
}
}

关于android - 使用覆盖 onclick 创建自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com