Android 扩展按钮OnClick
我正在尝试将特定行为添加到Android 扩展按钮OnClick,android,button,onclick,extends,Android,Button,Onclick,Extends,我正在尝试将特定行为添加到按钮的onClick,因此当单击按钮时,它们的自定义行为位于每个按钮的特定操作之上 我最近开始为Android开发,对事件和UI类的内部怪癖几乎没有经验 在我尝试过的情况下,buttom执行我在扩展类中编写的自定义行为,但不执行我指定给按钮的onClick操作 这是我正在尝试的自定义按钮 public class CooldownButton extends Button implements View.OnClickListener { Timer coold
按钮的onClick
,因此当单击按钮时,它们的自定义行为位于每个按钮的特定操作之上
我最近开始为Android开发,对事件和UI类的内部怪癖几乎没有经验
在我尝试过的情况下,buttom执行我在扩展类中编写的自定义行为,但不执行我指定给按钮的onClick
操作
这是我正在尝试的自定义按钮
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" />
从我看到的情况来看,您正在禁用按钮setEnabled(false)代码>然后您希望在下一次单击时执行一些操作onBtnNextClick(视图v)
。如果按钮在第一次单击时已被禁用,则不能再次单击该按钮 我根据其中一条评论找到了解决方案。
这并不完全是我想要解决问题的方式,但它已经接近了
我放弃了在java类中创建单击行为的想法。
相反,我在MainActivity中编写了一个单击侦听器,然后将侦听器设置为我想要具有这种特殊单击行为的所有按钮
Button nextButton = (Button) layout.findViewById(R.id.btnNext);
nextButton.setOnClickListener(buttonClickListener);
侦听器如下所示:
public View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
final Button btn = (Button) v;
btn.setEnabled(false);
new Thread(new Runnable() {
@Override
public void run() {
try {Thread.sleep(1000); }
catch (InterruptedException e) {e.printStackTrace();}
MainActivity.this.runOnUiThread(new Runnable()
{
@Override
public void run(){ btn.setEnabled(true); }
});
}
}).start();
switch (v.getId()) {
case R.id.btnNext:
doSomething();
break;
//case R.id.foobar:
//break;
}
}
};
我希望在BtnextClick和基类OnClick上运行相同的单击。在本例中,我将添加一个冷却机制,但我希望能够将自定义行为添加到Onclick方法中。请查看有关使自定义视图交互的文档:。我认为您不希望在视图中实现OnClickListener
。请尝试从xml中删除onClick属性,并从java CoolDownButton类中删除实现,并在java代码中使用它创建CoolDOwnClass的变量,并使用此CoolDownButton.setOnClickListener(new View.OnClickListener(){//将所有逻辑粘贴在此})中;
public View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
final Button btn = (Button) v;
btn.setEnabled(false);
new Thread(new Runnable() {
@Override
public void run() {
try {Thread.sleep(1000); }
catch (InterruptedException e) {e.printStackTrace();}
MainActivity.this.runOnUiThread(new Runnable()
{
@Override
public void run(){ btn.setEnabled(true); }
});
}
}).start();
switch (v.getId()) {
case R.id.btnNext:
doSomething();
break;
//case R.id.foobar:
//break;
}
}
};