java如何以静态和非静态方式使用枚举
我有两个活动,ActivityA
和ActivityB
,每个都有3个按钮。我在一个连接的设备上显示ActivityA
,在另一个连接的设备上显示ActivityB
。每个按钮可以处于2种状态中的1种,但需要在两个设备上反映状态。我使用一个带有静态方法的util类来接收来自这两个活动的按钮按下并将其发送到服务,以及在服务回调时更新这两个活动中按钮的状态
现在,每个按钮都从xml调用其相应活动中的函数。例如Button1
的onClick
如下所示:
安卓:onClick="button1Clicked"
该函数(从其对应的活动)调用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
}
...
我的问题是如何使用{buttonXClicked()
函数?我在UtilClass
中尝试的更改如下:
public static void buttonCliked(Button inButton) {
buttonPressed = inButton;
//call asynctask to tell the service inButton was pushed by passing
//buttonPressed
}
但这不起作用,因为我不能在ActivityA
或静态函数中使用非静态的enum
来传递。但是我需要enum是非静态的,因为我需要在UtilClass
中使用它
我是Android新手,所以如果我做错了什么,如果你能指出这一点,我将不胜感激
谢谢
# 1 楼答案
我不确定你所说的在一台设备上有活动A,在另一台设备上有活动B是什么意思,但我会尽力回答
我猜您正在运行一个服务来处理两个活动(可能在同一个进程中运行,也可能不在同一个进程中运行)之间的通信,并且您正在尝试使状态与共享静态类保持同步
与使用静态变量跟踪更改不同,我将采用以下方法:
仅使用枚举使Util类保持简单
让您的每个活动处理自己的按钮并发送消息
在您的服务中,您将向所有活动广播单击的按钮,并在每个活动中处理来自服务的消息以更新其按钮状态
# 2 楼答案
静态方法的这些问题可能是O-O设计问题的证据。从快速阅读中,听起来好像你试图在一节课上做太多的事情,而且越来越混乱。一些想法:
为什么在这里将
Button
枚举定义为嵌套类?您可以将它外部化(即移动到它自己的文件),然后共享问题就消失了,假设我理解您的意思一般来说,如果你正在编写一个帮助类,比如^ {< CD2>}(尽管我怀疑这里确实是必要的),考虑把所有的东西都变成非静态的。
<>要正确地存储状态,请考虑推荐的Android方法之一。对于这样简单的事情,Shared Preferences可能就足够了。如果您真的不想这样做,一个有状态的singleton对象(它适当地引用了枚举)应该这样做。然后,您的呼叫将类似于:
及
或类似的
# 3 楼答案
您可以使用片段而不是活动,并在包含片段的活动中使用类的单个实例
另一种可能的方法是使类成为单例,并使枚举实例成为类中的简单实例