扩展按钮OnClick

时间:2015-07-31 12:39:49

标签: android button onclick extends

我正在尝试向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
        }
    }

2 个答案:

答案 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;
        }
    }
};