如何通过键从 RouteTable.Routes 集合中获取 url?
可能重复:
android模型视图演示者/控制器示例
任何人都可以举例说明使用MVP框架制作Android应用程序吗?我已经谷歌了,并没有找到让我理解Android中MVP架构的那个.谢谢.
我是Dagger的新手,并试图找出为什么没有注入特定的依赖.尝试在片段中注入Presenter时出现以下错误:
Caused by: java.lang.IllegalArgumentException: No inject registered for members/com.company.myapp.view.fragment.OverviewFragment. You must explicitly add it to the 'injects' option in one of your modules.
at dagger.ObjectGraph$DaggerObjectGraph.getInjectableTypeBinding(ObjectGraph.java:302)
at dagger.ObjectGraph$DaggerObjectGraph.inject(ObjectGraph.java:279)
at com.company.myapp.view.fragment.OverviewFragment.initializePresenter(OverviewFragment.java:50)
at com.company.myapp.view.fragment.BaseFragment.onViewCreated(BaseFragment.java:28)
at com.company.myapp.view.fragment.OverviewFragment.onViewCreated(OverviewFragment.java:84)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:871)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1040)
at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1142)
at android.app.Activity.onCreateView(Activity.java:4786)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
at android.app.Activity.setContentView(Activity.java:1929)
at com.company.myapp.view.activity.HomeActivity.onCreate(HomeActivity.java:23)
at android.app.Activity.performCreate(Activity.java:5231)
Run Code Online (Sandbox Code Playgroud)
...
我有一个ApplicationModule,它可以提供必要的应用程序范围的模块(例如分析).
@Module(
injects = {
BaseApplication.class,
MyApplication.class,
TestMyApplication.class
},
includes = { DomainModule.class }
)
public class MyModule {
private …Run Code Online (Sandbox Code Playgroud) 我试图将java项目移植到kotlin并且遇到一些问题.我在java中使用泛型有一些MVP结构
interface View<P extends Presenter> {}
interface Presenter<V extends View> {}
interface BaseView<P extends Presenter> extends View<P> {}
class BaseActivity<P extends Presenter> extends AppCompatActivity implements BaseView<P> {}
Run Code Online (Sandbox Code Playgroud)
在前两个类我有IDE的错误
interface Presenter<V : View<*>> {}
interface View<P : Presenter<*>> {}
Run Code Online (Sandbox Code Playgroud)
我的错误是
*this type parameter violates the finite bound restriction*
Run Code Online (Sandbox Code Playgroud)
Java代码没有任何问题
看过很多 Dagger 演示应用程序后,我不清楚业务对象放在哪里。在典型的三层应用程序中,您有 ui、业务层和数据访问层。MVP 本质上是一个三层架构。
Dagger 处理组件和模块,我见过演示应用程序将业务逻辑放在模块中。但是根据 MVP 架构,业务逻辑属于 Presenter 层,因为该层被认为是 ui 和模型之间的桥梁。许多这些演示应用程序的模型仅包含一个类,其中包含用于存储和检索数据的公共字段。
有人可以澄清应该这样做的正确方法。
我读过一些关于在 Android 中使用 MVP 模式的文章。对我来说最好的方法是创建合同(每个模型、视图和演示者一个界面)。问题是我是否应该为每个 Activity 创建这样的合同,或者如果我的应用程序中有几个 Activity,如何实现它。谢谢
我一直在查看PRISM 2样本,了解如何最好地处理我正在开发的新应用程序,这将是一个PRISM 2/WPF应用程序.特别关注PRISM附带的View Injection示例应用程序我注意到所有视图都实现了一个接口,允许演示者(或ViewModel)与View进行交互.
在过去,我已经完成了相反的方式,我将演示者注入到视图中,以便视图可以直接调用演示者上的方法,如下所示:
public partial class SomeView : ModuleBase
{
private ISomePresenter _somePresenter;
public SomeView (ISomePresenter somePresenter):this()
{
// Give the view a reference to the presenter
_somePresenter = somePresenter;
// Bind the View to the presenter
DataContext = _somePresenter;
}
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
// The view can call actions directly on the presenter (OK I should probably use a command for this)
_somePresenter.SomeAction();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的技术对我来说似乎足够合理,但看着样本我开始质疑这种方法.最好的方法是否有人有意见(没有双关语)?
我想要一个仅在视图为脏时启用的保存按钮.我该怎么做呢?
我的特殊情况是使用.Net 2.0的WinForms应用程序.我有一个演示者调用的服务层.服务层返回屏幕绑定DTO.
是否可以将视图绑定到此DTO并让DTO实现isDirty属性?或者我应该将数据从DTO卸载到另一个专门用于演示目的的对象,例如viewmodel?
我总是使用带有MVP模式的asp.net webforms,它非常适合我需要的东西,我基本上创建了一个项目,其中包含我所有的业务规则,验证等......然后我在webforms项目中实现我的视图.
现在我们开始使用asp.net MVC并且使用MVP模式没有多大意义,对吧?那么使用MVC创建可伸缩且可测试的项目可能是一个很好的方法,它不会让我创建我的数据对象并在控制器上进行验证.我不想在不同的地方拥有相同的代码......
如果Web用户想要更新他/她在站点上的配置文件,则会有一些验证规则,用于何时按下提交按钮,如电子邮件地址不能为空,必须有效且不得存在于数据库中.
如果我尝试使用内部管理部分更新其配置文件而不必在那里复制代码,则应该应用这些相同的规则...
如果你能指出一个很好的样本项目来处理这个问题会很棒!
提前致谢!
我已经查看了一些关于MVP模式的不同示例,我发现了它的各种实现.我不清楚哪一个应该包含另一个:视图还是演示者?
顾名思义:
public MyPresenter(){
display = new MyView(this);
}
Run Code Online (Sandbox Code Playgroud)
或者作为我理智的逻辑(以及关于MVP 的维基百科页面)
public MyView(){
presenter = new MyPresenter(this);
}
Run Code Online (Sandbox Code Playgroud)
或者我应该使用完全不同的方法来创建这些对象吗?