【问题标题】:android check visibility of button after on clickandroid在点击后检查按钮的可见性
【发布时间】:2016-06-23 22:38:15
【问题描述】:

当我单击一个按钮时,我会调用一个函数,该函数在我连接到服务器时使按钮不可见。我无法检查按钮的可见性是否已被修改的问题。

 login_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                socket.connect();
                if (login_btn.getVisibility() == View.VISIBLE) {
                    Clink.show(EspacePersonnelActivity.this, "veuillez verifier les parametres de connexion");

                }
            }

        });

socket.connect 之后如果我收到这个事件

 //Réception message
        socket.on("EVT_ReponseOKConnexionZEP", new Emitter.Listener() {

            @Override
            public void call(final Object... args) {

                String data = (String) args[0];
                Log.i("message :", data);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        zepLayout.setBackgroundResource(R.drawable.rounded_corner_green);
                        logout_btn.setVisibility(View.VISIBLE);
                        login_btn.setVisibility(View.GONE);

                    }
                });

            }


        });

问题是login_btn 在点击之前是可见的,并且codition 总是返回true。 我想检查按钮在单击后是否始终可见。

【问题讨论】:

  • 你在哪里设置你的按钮不可见?
  • 我编辑了我的问题,实际上按钮的视图变成了 GONE 但问题我无法在点击时检查函数内部
  • 你为什么不禁用按钮?一旦它被推动就将其停用,因此不会接受进一步的事件。然后,如果请求失败,则在结果出现时再次激活它。

标签: android button


【解决方案1】:

所有与网络相关的操作都应该在后台线程上完成。查看您的代码,看起来当您调用 socket.connect() 时,连接将在后台线程中建立。因为连接将在后台线程中建立,所以 UI 线程向前移动并执行 if (login_btn.getVisibility() == View.VISIBLE) 语句。因为您正在设置 login_btn.setVisibility(View.GONE),所以在调用 if (login_btn.getVisibility() == View.VISIBLE) 后将执行的连接建立后,login_btn 可见性始终可见。如果要在建立连接后显示消息,则必须在 run() 方法中移动代码,否则如果要在建立连接之前/期间显示消息,则必须移动 Click.show()上面的 socket.connect() 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2018-05-28
    • 2020-11-24
    相关资源
    最近更新 更多