如何在 Android 上延迟“按下按钮”操作

5
public class MainActivity extends Activity implements NetworkMonitorListener {
    double _mylat = 0;
    double _mylong = 0;
    TextView textView1;

    Button clcikbutton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView1 = (TextView) findViewById(R.id.textView1);

        clcikbutton = (Button) findViewById(R.id.button1);

        clcikbutton.setEnabled(false);

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

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

                    @Override
                    public void run() {
                        clcikbutton.setEnabled(true);
                    }
                });
            }
        }, 5000));

        clcikbutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                        "MM/dd/yyyy hh:mm:ss aa");
                simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
                textView1.setText(DateFormat.getDateTimeInstance().format(
                        new java.util.Date("11/7/2014 5:19:11 AM UTC")));

            }
        });

    }
}

这是我在按钮点击时进行延迟的代码。我想实现的是,当我点击按钮后,它应该在5秒钟内被禁用,然后才能继续使用。请帮助我找出错误,因为会出现错误。


编译时错误 }, 5000)); 在此行,请检查。 - user2794306
发布整个Logcat日志,伙计。 - W I Z A R D
6个回答

9
尝试使用Handler在指定时间内禁用按钮:
clcikbutton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa");
       simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
       textView1.setText(DateFormat.getDateTimeInstance().format(new java.util.Date("11/7/2014 5:19:11 AM UTC")));
       clcikbutton.setEnabled(false);
       new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                clcikbutton.setEnabled(true);        
            }
        },5000);
    }
});

1
它正在工作,但是它被永久禁用了,而我想要它只在我点击按钮后禁用5秒钟。 - user2794306

0

在5000后有两个闭括号,请检查一下。

尝试添加一些句号1000。

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

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

                        @Override
                        public void run() {
                            clcikbutton.setEnabled(true);
                        }
                    });
                }
            }, 5000, 1000);

0
为什么不用这个:
    clcikbutton = (Button) findViewById(R.id.button1);
    clcikbutton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            clcikbutton.setEnabled(false);

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

                 @Override
                 public void run() {
                      clcikbutton.setEnabled(true);
                 }
            }, 5000));

       }
 });

0

Timer 不太可靠,建议使用 HandlerpostDelay() 方法。尝试以下代码:

clcikbutton = (Button) findViewById(R.id.button1);

clcikbutton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            // Do what you need to do..
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                    "MM/dd/yyyy hh:mm:ss aa");
            simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
            textView1.setText(DateFormat.getDateTimeInstance().format(
                    new java.util.Date("11/7/2014 5:19:11 AM UTC")));

            // Set the button not-clickable..
            clcikbutton.setEnabled(false);

            // Then re-enable it after 5 seconds..
            final Runnable enableButton = new Runnable() {
                @Override
                public void run() {
                    clcikbutton.setEnabled(true);
                }
            };

            new Handler().postDelayed(enableButton, 5000);
        }
});

这些代码应该能帮你实现你想要的效果:首先让按钮可以点击,然后在你点击后禁用它5秒钟。
希望对你有所帮助。 :)

0
你可以使用 Handler 来延迟执行某行代码:
 clickbutton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    // Do something after 5s = 5000ms
                    clickbutton.setEnabled(true);
                }
            }, 5000);

        }
    });

希望它能对你有所帮助 ツ


0

这是在 Kotlin 中的实现方式:

lifecycleScope.launch {
  buttonTimer.isEnabled = false
  delay(400) // debounce effect
  buttonTimer.isEnabled = true
}

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