点击后禁用按钮

19

我是编程世界的新手,我的知识有限。如果我问了什么蠢问题,请原谅。

我正在创建一个活动,它有开始和停止按钮。当用户点击开始按钮时,服务必须启动;当停止按钮被点击时,服务必须停止。

现在,我希望在单击开始按钮(服务开始运行)时禁用开始按钮,并且当单击停止按钮时,我希望看到开始按钮作为正常可点击按钮。

我已经通过创建按钮对象使用了.setEnabled(false)。 我需要帮助...提前感谢。


1
当使用 .setEnabled(false) 时会发生什么?您能否更具体地说明您期望的输出以及您得到的内容? - Nav
Nav-当我按下按钮时,它被视为禁用状态。但我希望只有在我按下该按钮时才禁用该按钮。 - ADD
什么?您想在单击“开始”按钮后禁用它,对吗?当单击“停止”按钮时,您想禁用“停止”按钮并启用“开始”按钮,还是我完全错了? - Araw
11个回答

15
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;        
    }
}

& 请查看此链接 如何禁用Android按钮?


10

您也可以尝试:-

启用按钮 -

button.setClickable(true); 

禁用按钮的方法-

button.setClickable(false);

1
谢谢,这正是我想要的,点个赞。 - RajatN

3
在onclick事件中,禁用button1当它被点击时。
public void onClick(View v) {
  if(v.getId() == R.id.button1)
   {
       Button btn = (Button)findViewById(R.id.buton1);
       btn.setEnabled(false);

   }

}

2

如果您想从另一个类禁用它,可以使用这个方法,

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

你必须在类的开头声明“context”。
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);
}

2
使用Kotlin,您可以通过以下方式在单击时禁用按钮:
myButton.setOnClickListener {
    it.isClickable = false     // to disable clicking on button
    it.isEnabled = false       // to disable button
}

不要忘记这里的视图是 it


1

试试这个:

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_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/start"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Start"
android:visibility="visible"
/>
<Button
android:id="@+id/stop"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Stop"
android:visibility="visible"
/>


1

为按钮初始化OnClickListener。在第一个按钮内,只需将setEnable()设置为false..并从第二个按钮的click listener中将setEnable设置为true。

享受吧!


1

如果你想在按钮点击后使其不可见,那么首先像Vipin所说的那样将其禁用,然后添加这个.setVisibility(View.INVISIBLE);,这将在按钮点击后隐藏按钮,当你想再次使其可见时,请使用.setVisibility(View.VISIBLE);

注意:如果你想让按钮不可见,并且不想让它占用布局空间,则可以使用View.GONE而不是View.INVISIBLE

我希望我表达清楚了。


1
更为理想的解决方案是,
onclick(){
  btn.setEnabled(false);
  btn.setClickable(false);
  //yourwork
  myWork();
}

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

0
你可以调用button.setOnClickListener(null);来取消事件监听器。此外,您可以更改背景可绘制对象以使其具有禁用效果。
PS:仅在没有其他解决方案时尝试此解决方案。

1
虽然更好的解决方案是使用 setEnabled(false) 方法。 - 0xC0DED00D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接