扩展按钮 OnClick
Extend Button OnClick
我正在尝试向 Button
的 onClick
添加特定行为,因此当它们被点击时,它们在每个按钮的特定操作之上都有自定义行为。
我最近开始为 Android 开发,对事件的内部怪癖和 UI classes 没有什么经验。
我试过后,按钮执行了我在扩展 class 中编写的自定义行为,但没有执行我专门分配给按钮的 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
}
}
据我所知,您正在禁用按钮 setEnabled(false);
,然后您想在下次点击时执行某些操作 onBtnNextClick(View v)
。如果按钮在第一次单击时已被禁用,则不能再次单击该按钮。
我按照其中一条评论指示找到了解决方案。
这不是我想要解决问题的方式,但它已经接近了。
我放弃了在 java class 中制作点击行为的想法。
相反,我在 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;
}
}
};
我正在尝试向 Button
的 onClick
添加特定行为,因此当它们被点击时,它们在每个按钮的特定操作之上都有自定义行为。
我最近开始为 Android 开发,对事件的内部怪癖和 UI classes 没有什么经验。
我试过后,按钮执行了我在扩展 class 中编写的自定义行为,但没有执行我专门分配给按钮的 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
}
}
据我所知,您正在禁用按钮 setEnabled(false);
,然后您想在下次点击时执行某些操作 onBtnNextClick(View v)
。如果按钮在第一次单击时已被禁用,则不能再次单击该按钮。
我按照其中一条评论指示找到了解决方案。 这不是我想要解决问题的方式,但它已经接近了。
我放弃了在 java class 中制作点击行为的想法。 相反,我在 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;
}
}
};