我正在开发使用javafx gluon和GCM进行消息传递的移动应用程序
当其他设备广播消息时,我想通过调用其控制器来刷新当前活动视图和传入消息 .
我正在使用Afterburner框架 . 它也在gluon getting started中描述
如何从扩展MobileApplication的类中的getView()中检索视图控制器?
这是我创建的类:
public class MyGCMListenerService extends GcmListenerService {
private final String NOTIFICATION_TAG = "NotificationExample";
public MyGCMListenerService() {
}
@Override
public void onMessageReceived(String from, Bundle data) {
String varMessage = data.getString("message");
try {
JSONObject json = new JSONObject(varMessage);
String messageContent = getStringFromJSON(json, "message");
Integer senderId = getIntegerFromJSON(json, "senderId");
String senderName = getStringFromJSON(json, "senderName");
String comId = getStringFromJSON(json, "communityId");
SKSApplication.getInstance().doRefreshMessageUI(messageContent,senderId,senderName,comId );
} catch (JSONException e) {
e.printStackTrace();
}
}}
layout xml文件(directmessage.fxml)
<View xmlns:fx="http://javafx.com/fxml/1" fx:id="directMessageView" prefHeight="600.0" prefWidth="400.0"
xmlns="http://javafx.com/javafx/8.0.40"
fx:controller="com.tenma.mobile.message.directmessage.DirectMessagePresenter">
</View>
DirectMessageView类扩展了FXMLView
public class DirectMessageView extends FXMLView {
}
DirectMessagePresenter类实现Initializable
public class DirectMessagePresenter implements Initializable{
public void displayIncomingMessage(String messageContent,Integer senderId,String senderName, String comId){
//save to internal db
// display message
}
}
扩展MobileAplication的类SKSAplication
public class SKSApplication extends MobileApplication{
private static SKSApplication instance;
public static final String DIRECT_MESSAGE_VIEW = "DIRECT_MESSAGE_VIEW";
public static final String GROUP_MESSAGE_VIEW = "GROUP_MESSAGE_VIEW";
public SKSApplication() {
instance = this;
}
public static SKSApplication getInstance() {
return instance;
}
addViewFactory(HOME_VIEW, () -> {
HomeView homeView = new HomeView();
homePresenter = (HomePresenter) homeView.getPresenter();
return (View) homeView.getView();
});
addViewFactory(DIRECT_MESSAGE_VIEW, () -> {
DirectMessageView directMessageView = new DirectMessageView();
return (View) directMessageView.getView();
});
addViewFactory(GROUP_MESSAGE_VIEW, () -> {
GroupMessageView groupMessageView = new GroupMessageView();
return (View) groupMessageView.getView();
});
public void doRefreshMessageUI(String messageContent,Integer senderId,String senderName, String comId ) {
if (DIRECT_MESSAGE_VIEW.equals(getView().getName())) {
在这里我尝试从doRefreshMessageUI方法中的getView()中检索直接消息视图,但它不起作用
DirectMessageView view = (DirectMessageView) getView();
DirectMessagePresenter presenter = (DirectMessagePresenter) view.getPresenter();
presenter.displayIncomingMessage(messageContent,senderId,senderName,comId);
}
}
}
先感谢您
1 回答
创建视图后,您可以检索View的演示者:
无论您显示的是当前视图,这都将有效 .
稍后,当您想要传递一些新值时,您可以使用它的方法:
假设在该演示者上有控件来显示新值,您只需要在那里设置它们:
同样,您可以使用JavaFX属性: