【问题标题】:How do I change button visibility from other class?如何更改其他类的按钮可见性?
【发布时间】:2016-08-26 09:24:48
【问题描述】:

所以基本上我的 MainActivity 中有一个按钮

 Button button1 = (Button)findViewById(R.id.button1);
 button1.setVisibility(View.GONE);

从 GameView 类更改按钮可见性的方法是什么?

if(state == State.PAUSED){
//change button visibility
}

【问题讨论】:

  • 什么是 GameView?一个片段?

标签: java android button visibility


【解决方案1】:

你需要公开静态字段Button button1;

如果你想在另一个类中调用按钮,只需像示例一样调用该类和按钮

FirstClass.button1

【讨论】:

  • 不推荐使用静态字段
  • 为什么不推荐?
  • Android 编码标准是这么说的。一旦 Activity 被操作系统杀死,或者 View 不再需要并且可以被垃圾回收,它将为 null,因此在使用此方法时会收到 NullPointerException。最好在 Activity 上定义一个方法来操作其按钮并传递 Activity 本身,而不是将视图变量暴露给外部类
【解决方案2】:

尝试保留对您要更改的视图(按钮)的引用,并以您认为合适的任何方式进行更改

button1.setVisibility(View.GONE);

or
button1.setVisibility(View.VISIBLE);

【讨论】:

    【解决方案3】:

    将您的 Button button1 声明为 MainActivity 中的静态全局变量,例如

    public Static Button  button1; 
    

    那么您的 GameView 代码将是

    if(state == State.PAUSED){
      MainActivity.button1.setVisibility(View.GONE)
    }
    

    【讨论】:

    • 虽然不推荐使用静态变量
    • 我知道@cricket_007。 LocalBroadcast Receiver 是最好的解决方案。但我给了他一个即时的解决方案。
    • 当我试图通过 id 找到它时,我收到此错误:无法从类型 Activity 对非静态方法 findViewById(int) 进行静态引用。
    • 我认为您在非静态方法中更改代码的可见性。如果它也将该方法设为静态。
    • 它工作正常,但是我现在如何为我的按钮设置一个没有 findViewById 的 onClickListener?(在 xml 文件中有一个 ID 为 button1 的按钮)
    【解决方案4】:

    最推荐的实现方式是使用本地BroadcastReceiverMainActivity 的子类)从广播中读取消息,并据此设置按钮的可见性。

    GameView 发送带有正确消息的广播。

    看起来很复杂,但相信我,这是最好的和推荐的方法。

    Link 用于教程。

    【讨论】:

      猜你喜欢
      • 2019-08-14
      • 2020-12-22
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多