[英]How do I call Activity class method from another class?
我有一个从服务器接收设置的 Config 类。 然后将这些设置应用到名为 ApplySettings() 的活动方法中。 我将此 ApplySettings() 函数称为 onCreate 函数。 第一次工作正常,但我无法检测到 Activity 类中的设置更改。 我想在设置更改后立即从 Config 类调用此 ApplySettings() 方法。 我怎样才能做到这一点? 谢谢
Config.Java //Singleton class
public class Config
{
public String name = "";
public void getSettingsFromServer()
{
name = "";//name received from server
}
}
MyActivity.java
public class SettingsSystem extends AppCompatActivity
{
private Config config = Config.getInstance();
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings_system);
ApplySettings();
}
public void ApplySettings()
{
//settings are applied here
}
}
这两个类都在单独的文件中。
您可能希望将MyActivity
的实例存储在您的配置类中。
在Config.java
添加一个方法:
public class Config
{
public String name = "";
private SettingsSystem activity;
public void getSettingsFromServer()
{
name = "";//name received from server
}
public void setMyActivity(SettingsSystem activity)
{
this.activity = activity;
}
public void applyChanges()
{
if (this.activity != null)
{
this.activity.ApplySettings();
}
}
}
然后在您的MyActivity
类中,您可以执行以下操作:
public void setConfigActivity()
{
this.config.setMyActivity(this);
}
现在您的配置实例具有 SettingsSystem。
笔记
方法不应以大写字母开头。 这违反了 Java 编码标准。 你也说它的MyActivity.java
但将它显示为SettingsSystem
在这里需要一致性,因为它不会编译。
循环依赖也是不好的做法。 可能想重新考虑这两个类如何相互作用。
您可以使用EventBus来实现您想要的。
1.新建一个名为SettingsChangedEvent
类
final public class SettingsChangedEvent { /* Additional fields if needed */ }
2.在Config类中的getSettingsFromServer()
方法中添加以下代码
public void getSettingsFromServer() {
name = ""; //name received from server
// [ADD THIS] Notify to activity that settings are changed,
// it should apply new settings
EventBus.getDefault().postSticky(new SettingsChangedEvent());
}
3.将这些方法添加到SettingsSystem
活动
@Override
protected void onStart() {
super.onStart();
// Allow this activity to listen settings changed event
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
// Disallow this activity from listening settings changed event
EventBus.getDefault().unregister(this);
super.onStop();
}
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onSettingsChangedEvent(SettingsChangedEvent ev) {
// When settings changed event is notified/posted from Config class,
// the code inside this method will be executed.
SettingsChangedEvent event = EventBus.getDefault().removeStickyEvent(SettingsChangedEvent.class);
if (event != null) {
// Apply new settings here
ApplySettings();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.