我有 2 个 Activity ,ActivityA
和 ActivityB
,每个 Activity 有 3 个按钮。我在一台连接的设备上显示 ActivityA
,在另一台连接的设备上显示 ActivityB
。每个按钮都可以处于两种状态之一,但这些状态需要反射(reflect)在两个设备上。我使用带有静态方法的 util 类来接收来自两个 Activity 的按钮按下并将其发送到服务,并在从服务回调时更新两个 Activity 中按钮的状态。
现在,每个按钮都从 xml 调用其相应 Activity 中的函数。例如 Button1
的 onClick
如下所示:
android:onClick="button1Clicked"
该函数(来自其相应的 Activity )调用 UtilClass 中的函数,如下所示:
public void button1Clicked(View view) {
UtilClass.button1Cliked();
}
我在 UtilClass
中设置了一个 enum
,这样我就知道要更新哪个按钮(在 ActivityA
和 ActivityB
中) ) 在从服务回调时。它看起来像这样:
public class UtilClass {
public static Button buttonPressed = WfdOperationButton.NONE;
public enum Button {
BUTTON1, BUTTON2, BUTTON3
}
public static void button1Cliked() {
buttonPressed = Button.BUTTON1;
//call asynctask to tell the service button1 was pushed by passing
//buttonPressed
}
public static void button2Cliked() {
buttonPressed = Button.BUTTON2;
//call asynctask to tell the service button2 was pushed by passing
//buttonPressed
}
...
我的问题是如何在 ActivityA
和 ActivityB
中使用 UtilClass
中的相同 enum
来合并UtilClass
中的 3 个 buttonXClicked()
函数?我在 UtilClass
中尝试的更改如下:
public static void buttonCliked(Button inButton) {
buttonPressed = inButton;
//call asynctask to tell the service inButton was pushed by passing
//buttonPressed
}
但这不起作用,因为我无法在静态函数中的 ActivityA
或 ActivityB
中使用非静态 enum
来传入。但我需要枚举是非静态的,因为我需要在 UtilClass
中使用它。
我是 Android 新手,因此如果我做错了什么,如果您指出,我将不胜感激。
谢谢!
最佳答案
静态方法的这些问题可能是 O-O 设计问题的证据。快速阅读一下,听起来好像你试图在一个类上做太多事情,而且变得很困惑。一些想法:
为什么要在这里将 Button
枚举定义为嵌套类?您可以将其外部化(即移至其自己的文件),然后共享问题就会消失,假设我在这里理解您的意思。
一般来说,如果您正在编写像 UtilClass
这样的帮助器类(尽管我怀疑这里实际上有必要),请考虑将所有内容都设为非静态。
要正确存储状态,请考虑推荐的 Android 方法之一。对于像这样的简单事情,Shared Preferences可能就足够了。如果你真的不想这样做,一个有状态的 singleton适当引用枚举的对象应该执行此操作。那么您的调用将类似于:
public void button1Clicked(View view) {
ButtonState.getInstance().setState(Button.Button1);
// call wrapper for async call to say Button1 was pressed e.g.:
serviceClient.sendButtonState(Button.Button1);
}
和
class ButtonState {
private static ButtonState instance = new ButtonState();
private Button state
public ButtonState getInstance() {
return instance;
}
public void setState(Button value) {
state = value;
}
public Button getState() {
return state;
}
}
或类似的。
关于java - 如何以静态和非静态方式使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020418/