【发布时间】:2015-07-31 12:39:48
【问题描述】:
我正在尝试将特定行为添加到Button 的onClick,因此当它们被单击时,它们会在每个按钮的特定操作之上具有自定义行为。
我最近开始为 Android 开发,对事件和 UI 类的内部怪癖几乎没有经验。
我试过了,按钮执行我在扩展类中编写的自定义行为,但没有执行我专门分配给按钮的 onClick 操作。
这是我正在尝试做的自定义Button。
public class CooldownButton extends Button implements View.OnClickListener
{
Timer cooldown;
public CooldownButton(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
public CooldownButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CooldownButton(Context context)
{
super(context);
}
@Override
public void onClick(View v)
{
cooldown= new Timer();
cooldown.schedule(cooldownRun(),0,500);
setEnabled(false);
//performClick();
}
private TimerTask cooldownRun()
{
return new TimerTask()
{
@Override
public void run()
{
cooldown.cancel();
cooldown.purge();
setEnabled(true);
}
};
}
}
然后我在 xml 这样的布局上使用它:
<CooldownButton android:id="@+id/btnNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onBtnNextClick" />
OnBtnNextClick 永远不会被调用。
public void onBtnNextClick(View v)
{
if(v.getId() == R.id.btnNext)
{
//Do something
}
}
【问题讨论】:
-
查看这份关于使自定义视图交互的文档:developer.android.com/training/custom-views/…。我认为您不想在您的视图中实现
OnClickListener。 -
尝试从xml中删除onClick属性并从java CoolDownButton类中删除实现并在java代码中使用它创建一个CoolDownClass变量并使用这个coolDownButton.setOnClickListener(new View.OnClickListener(){//将所有逻辑粘贴到 this});
标签: android button onclick extends