单击时禁用按钮

Posted

技术标签:

【中文标题】单击时禁用按钮【英文标题】:Disable Button on click 【发布时间】:2012-04-07 23:48:02 【问题描述】:

我是编程世界的新手,我的知识有限。如果我问任何错误,请原谅我。 我的问题是。

我正在创建一个具有开始和停止按钮的活动。当用户单击开始按钮时,必须启动服务;并且在 STOP 时服务必须停止。

现在我想在单击开始按钮时禁用我的 START 按钮(服务在单击 START 按钮时启动),当单击 STOP 按钮时,我希望将 START 按钮视为正常的可单击按钮。

我通过创建按钮对象使用了 .setEnabled(false)。 我需要帮助...在此先感谢

【问题讨论】:

当你使用 .setEnabled(false) 时会发生什么?您能否更具体地说明您期望的输出和得到的结果 Nav-它被视为按钮被禁用。但我希望仅在按下该按钮时禁用该按钮 嗯?您想在单击“开始”按钮时禁用它,对吗?当单击停止按钮时,您想禁用停止按钮并启用开始按钮,还是我都错了? 【参考方案1】:
int count = 0;

if (count == 0) 
    stop.setEnabled(false);
    PlayButton.setEnabled(true);


@Override
public void onClick(View v) 
    switch(v.getId()) 
        case R.id.play:
            count++;
            play.setEnabled(false);
            Toast.makeText(this, "Button Disabled", Toast.LENGTH_LONG).show();
            Stopbutton.setEnabled(true);
            break;

        case R.id.stop:
            Toast.makeText(this, "Button Disabled", Toast.LENGTH_LONG).show();
            count--;    
            PlayButton.setEnabled(true);
            stop.setEnabled(false);
            break;        
    

并检查此链接 How to disable an android button?

【讨论】:

【参考方案2】:

你也可以试试:-

用于按钮启用-

button.setClickable(true); 

按钮禁用-

button.setClickable(false);

【讨论】:

谢谢,这正是我想要的,+1【参考方案3】:

在 onclick 的正文中

在按钮1被点击时禁用它

public void onClick(View v) 
  if(v.getId() == R.id.button1)
   
       Button btn = (Button)findViewById(R.id.buton1);
       btn.setEnabled(false);

   


【讨论】:

【参考方案4】:

如果你想从另一个类中禁用它,你可以使用它,

Button btn = ((MainActivity)context).findViewById(R.id.myButton);
btn.setEnabled(false);    //or (true) to enable it

您还必须在课程开始时声明“上下文”

public class MyClass extends AppCompatActivity     
    Context context;

当我需要执行某个操作并且不希望用户继续点击按钮时,我通常在我的 onPreExecute 和 onPostExecute 中使用它。

@Override
protected void onPreExecute() 
    //some actions to be performed or set before executing task 
    Button btn = ((MainActivity)context).findViewById(R.id.myButton);
    btn.setEnabled(false);


@Override
protected void onPostExecute() 
    //some actions to be performed or set after executing task 
    Button btn = ((MainActivity)context).findViewById(R.id.myButton);
    btn.setEnabled(true);

【讨论】:

【参考方案5】:

使用 kotlin,您可以在点击时禁用按钮,

myButton.setOnClickListener 
    it.isClickable = false     // to disable clicking on button
    it.isEnabled = false       // to disable button

别忘了这里的view是it

【讨论】:

【参考方案6】:

试试这个:

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.view.View;

public class MainActivity extends Activity 

private Button start, stop;

@Override
public void onCreate(Bundle savedInstanceState)
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    start = (Button)findViewById(R.id.start);
    stop = (Button)findViewById(R.id.stop);

    start.setOnClickListener(new OnClickListener() 
        public void onClick(View v) 
            start.setVisibility(View.GONE);
            /* do something else */
        
    );

    stop.setOnClickListener(new OnClickListener() 
        public void onClick(View v) 
            start.setVisibility(View.VISIBLE);
            /* do something else */
        
    );

还有你的布局main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_
>
<Button
android:id="@+id/start"
android:layout_ 
android:layout_ 
android:text="Start"
android:visibility="visible"
/>
<Button
android:id="@+id/stop"
android:layout_ 
android:layout_ 
android:text="Stop"
android:visibility="visible"
/>

【讨论】:

【参考方案7】:

如果你想让按钮在点击按钮后不可见,那么首先按照 vipin 的说法禁用它并添加这个.setVisibility(View.INVISIBLE); 这将在按钮点击后隐藏按钮,当你想再次让它可见时使用这个.setVisibility(View.VISIBLE);

注意:如果您希望按钮不可见并且不希望它占用所需的布局空间,则可以使用View.GONE 而不是View.INVISIBLE

我希望我很清楚。

【讨论】:

【参考方案8】:

更优选的解决方案是,

onclick()
  btn.setEnabled(false);
  btn.setClickable(false);
  //yourwork
  myWork();


myWork()
 //your tasks.
 btn.setEnabled(true);
 btn.setClickable(true);

【讨论】:

【参考方案9】:

为按钮初始化 onClickListener。在第一个按钮内只需将 setEnable() 设置为 false ..然后从第二个按钮单击侦听器将 setEnable 设置为 true

享受

【讨论】:

【参考方案10】:

您可以致电button.setOnClickListener(null); 取消事件监听器。此外,您可以更改背景可绘制对象以使其具有禁用效果。

PS:只有在其他方法无效时才尝试此解决方案。

【讨论】:

虽然更推荐的解决方案是使用 setEnabled(false) 方法。【参考方案11】:
myButton.setEnabled(false);

Timer buttonTimer = new Timer();
buttonTimer.schedule(new TimerTask() 

    @Override
    public void run() 
        runOnUiThread(new Runnable() 

            @Override
            public void run() 
                myButton.setEnabled(true);
            
        );
    
, 5000);

试试这个,效果很好

【讨论】:

以上是关于单击时禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章

单击时从循环中禁用按钮

单击时如何使命令不禁用按钮

单击相应复选框时如何启用禁用的锚按钮

单击按钮时暂时禁用悬停(jQuery)

使用 Jquery 在第一次单击时禁用提交按钮

无法制作双向按钮(第一次单击使问题在第二次启用时禁用)