【问题标题】:Inactive button for 5 seconds before displaying it在显示前 5 秒钟不活动按钮
【发布时间】:2018-09-05 03:38:48
【问题描述】:

目标:
当您启动安卓应用程序时,该按钮不应在 5 秒后显示。

问题:
代码不起作用,我缺少什么部分?

信息:
*我是安卓新手
*代码来源于此页面Android - Hide button during an onClick action

谢谢!

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Button button2 = (Button) findViewById(R.id.btn_test);
        button2.setVisibility(GONE);

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

                try
                {
                    //dummy delay for 5 second
                    Thread.sleep(5000);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }


                runOnUiThread(new Runnable() { //resetting the visibility of the button
                    @Override
                    public void run() {

                        //manipulating UI components from outside of the UI Thread require a call to runOnUiThread
                        button2.setVisibility(VISIBLE);
                    }
                });
            }
        }).start();


    }

}

【问题讨论】:

  • 您的意思是按钮应该在 5 秒后可见?还是 5 秒后不可见?
  • 尝试将可见性 GONE 更改为 INVISIBLE
  • 你需要设置一个监听器来启动你的命令

标签: android android-studio


【解决方案1】:

这可以通过更简单的方式实现。如果您需要的顺序是: 启动应用 -> 显示按钮 -> 等待 5 秒 -> 隐藏按钮

final Button button2 = (Button) findViewById(R.id.btn_test);

    button2.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (!isDestroyed() && !isFinishing()) {
                button2.setVisibility(View.GONE);
            }
        }
    },5000);

否则,如果您应该在应用启动后 5 秒后显示按钮,则只需在布局中将按钮的可见性设置为 GONE 并在延迟后操作中将 button2.setVisibility(View.GONE) 更改为 button2.setVisibility(View.VISIBLE)

【讨论】:

  • @What'sUP 我很确定它有效。我现在在我的示例应用程序中仔细检查了它。能否请您发布您的完整活动和布局代码?
【解决方案2】:

你需要设置一个监听器来启动你的命令,onCreate就是创建。

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final Button button2 = (Button) findViewById(R.id.btn_test);


    button2.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
       button2.setVisibility(GONE);
    new Thread(new Runnable() {
        @Override
        public void run() {

            try
            {
                //dummy delay for 5 second
                Thread.sleep(5000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }


            runOnUiThread(new Runnable() { //resetting the visibility of the button
                @Override
                public void run() {

                    //manipulating UI components from outside of the UI Thread require a call to runOnUiThread
                    button2.setVisibility(VISIBLE);
                }
            });
        }
    }).start();
    }

这段代码会在onClick之后隐藏按钮,启动线程,5秒后会再次出现。

【讨论】:

  • @MarcosVasconcelos 你是说button2.setOnClickListener(new View.OnClickListener() { ... })吗?
  • 还有@Override注解
  • 是的,是设置而不是add,override是可选的
猜你喜欢
  • 2016-08-07
  • 1970-01-01
  • 2011-12-31
  • 2022-08-09
  • 2012-08-24
  • 2019-05-06
  • 2020-04-20
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多