2011-12-07 45 views
0

我有一个主要的Activity和一个对话框,通过它我想更改一些应用程序变量。这不幸的是包括改变几个不同类的现有实例的属性。我想要做的就是调用我的主Activity的方法,它可以处理更改Activity的变量和修改类的现有实例。在我的对话我打电话从对话框中更改变量

mainActivity.smartSetter(variableName, variableValue); 

,并在我的活动我有

public void smartSetter(variableName name, float value) { 
    switch (name) { 
    case Name1: {do stuff} 
    case Name2: {do stuff} 
    //etc 
} 

编译器说,我不能让一个静态参考非静态方法smartSetter。仍然是Java noob,我怀疑这是因为smartSetter需要在mainActivity的实例上调用,而不仅仅是类本身。有人可以澄清吗?

此外,这个问题似乎是由于应用程序体系结构的糟糕设计造成的,所以我欢迎任何可以帮助我改进设计的建议,以便它更加实用和优雅。

+0

你有没有尝试过让公共静态void smartSetter(...){...}? – Hiral

+0

你指的是“几个不同类的现有实例”究竟是什么?例如。活动,实体对象等?根据答案,你可以使用'startActivityForResult(...)',或者为回调提供一个监听器接口,甚至以匿名方式创建内联对话框并让它在封装活动的成员上工作。 –

+0

@Hiral:那么我不能在静态上下文中做{stuff}。 – JohnEye

回答

0

也许这个smartSetter应该被实现为Broadcast Receiver。我认为这example适合您的需求。

+0

我其实已经在其他地方遇到过这种情况,但是希望能够快速简单地做到这一点。不管怎样,谢谢你。 – JohnEye