我正在尝试向Button
onClick
添加特定行为,因此当点击它们时,它们会在每个按钮的特定操作之上具有自定义行为。
我最近开始为Android开发,对事件和UI类的内在怪癖几乎没有经验。
我试过的是,buttom执行我在扩展类中编写的自定义行为,但后来没有具体执行我分配给按钮的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
}
}
答案 0 :(得分:0)
据我所知,您正在停用按钮setEnabled(false);
,然后您希望在下次点击onBtnNextClick(View v)
时执行某些操作。如果在第一次单击按钮时禁用了按钮,则无法再次单击该按钮。
答案 1 :(得分:0)
我在遵循其中一条评论指示后找到了解决方案。 这不是我想要解决问题的方式,但它已经接近了。
我放弃了在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;
}
}
};