【问题标题】:Extend Button OnClick扩展按钮 OnClick
【发布时间】:2015-07-31 12:39:48
【问题描述】:

我正在尝试将特定行为添加到ButtononClick,因此当它们被单击时,它们会在每个按钮的特定操作之上具有自定义行为。

我最近开始为 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


【解决方案1】:

据我所见,您正在禁用按钮 setEnabled(false);,然后您希望在下次单击 onBtnNextClick(View v) 时执行一些操作。如果按钮在第一次单击时已被禁用,则不能再次单击该按钮。

【讨论】:

  • 我想要同样的点击来运行 OnBtnNextClick 和基类 OnClick。在这种情况下是添加一个冷却机制,但我希望能够向 Onclick 方法添加自定义行为。
【解决方案2】:

在遵循 cmets 指示之一后,我找到了解决方案。 这不是我想要解决问题的方式,但它已经接近了。

我放弃了在 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;
        }
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多