Android 如何从父视图传递数据';s演示者到子视图';主持人是谁?
我在Android中使用MVP模式。结构如下图所示Android 如何从父视图传递数据';s演示者到子视图';主持人是谁?,android,mvp,Android,Mvp,我在Android中使用MVP模式。结构如下图所示 Activity - Presenter | Fragment | CustomView | views 因此,当演示者从网络获取数据时,它直接将数据传递给片段,片段将数据传递给自定义视图,自定义视图将数据传递给视图 我不确定如何通过MVP模式从活动传递视图中使用的数据。如果我为每个片段、自定义视图和视图创建演示者,那么如何将数据从活动的演示者传递给其他演示者? 有人能帮我举个例子吗?为了给你的问题提供更具体的答案
Activity - Presenter
|
Fragment
|
CustomView
|
views
因此,当演示者从网络获取数据时,它直接将数据传递给片段,片段将数据传递给自定义视图,自定义视图将数据传递给视图
我不确定如何通过MVP模式从活动传递视图中使用的数据。如果我为每个片段、自定义视图和视图创建演示者,那么如何将数据从活动的演示者传递给其他演示者?
有人能帮我举个例子吗?为了给你的问题提供更具体的答案,你需要举个具体的例子。每个解决方案都在上下文中有效。我会给你几种方法。选择一个适合你的问题 MVP非常重要的部分是模型。据我所知,Model一词随着该论文的发布而在编程中流行起来,该论文后来被改进并重命名为MVC 本文中模型的概念定义为: 模型是以 计算系统中的数据 模型在计算机中表示为一组数据 以及处理这些数据所需的方法 随着时间和经验的推移,人们发现并指定了不同类型的模型 以下是其中一些:
- 应用程序模型(请阅读以了解更多信息)
public class MessageBus {
// static this time, you can use DI or ServiceLocator with interface
public static void sendMessage(object m) { }
public static void registerListener(MessageListener listener) { }
}
public class FoldersTreeViewPresenter {
public void onSelectFolder(FolderView view) {
// select the folder in the view
MessageBus.sendMessage(new FolderSelected(view.Folder));
}
}
public class FilesFoldersViewPresenter : MessageListener {
public FilesFoldersViewPresenter() {
MessageBus.addListener(this);
}
private void getFilesAndFoldersFromFileSystem(Folder folder) {
// get from fs
// fill views with them etc.
}
public void onMessage(object m) {
if(m instanceof FolderSelected) {
FolderSelected folderSelectedMessage = (FolderSelected)m;
getFilesAndFoldersFromFileSystem(folderSelectedMessage.Folder);
}
}
}
根据您的具体情况,如果您可以创建一个好的模型,无论是域、应用程序还是演示文稿,那么就这样做。共享此模型,从而从演示者创建对模型的依赖关系,而不是在演示者之间创建依赖关系。这样一来,演示者之间就有了松散的耦合,可以更轻松地进行更改
如果无法使用型号,请使用消息。通过创建用于通信的消息的协议,这是一种很好的分离演示者的方法
查看有关在组件之间使用消息进行协作的文章
这里还有一些关于GUI体系结构的好文章:
public class MessageBus {
// static this time, you can use DI or ServiceLocator with interface
public static void sendMessage(object m) { }
public static void registerListener(MessageListener listener) { }
}
public class FoldersTreeViewPresenter {
public void onSelectFolder(FolderView view) {
// select the folder in the view
MessageBus.sendMessage(new FolderSelected(view.Folder));
}
}
public class FilesFoldersViewPresenter : MessageListener {
public FilesFoldersViewPresenter() {
MessageBus.addListener(this);
}
private void getFilesAndFoldersFromFileSystem(Folder folder) {
// get from fs
// fill views with them etc.
}
public void onMessage(object m) {
if(m instanceof FolderSelected) {
FolderSelected folderSelectedMessage = (FolderSelected)m;
getFilesAndFoldersFromFileSystem(folderSelectedMessage.Folder);
}
}
}