Articles of mvp

Android MVP – 应避免在演示者中使用R.string引用吗?

为了完全将Android SDK与我的演示者类分离,我试图找出避免访问我们通常使用R的资源ID的最佳方法。 我以为我可以创建一个接口来访问像字符串资源这样的东西,但我仍然需要ID来引用字符串。 如果我要做的事…… public class Presenter { private MyView view = …; private MyResources resources = …; public void initializeView() { view.setLabel(resources.getString(LABEL_RES_ID); } } 我仍然必须拥有LABEL_RES_ID ,然后将其映射到我的资源桥中的R.string.label 。 这很酷,因为我可以在用其他东西进行unit testing时将其换掉,但我不想管理另一个到字符串值的映射。 如果我放弃并只使用R.string值,我的演示者将再次绑定到我的视图。 那不理想? 是否有一个更简单的解决方案,人们用来解决这个问题,以使他们远离演示者。 我不想以超出Android提供的方式管理字符串,因为我仍然希望将它们放在布局文件中并获得国际化等的好处。我想做一个可以与这个演示者一起工作的哑unit testing无需Android SDK即可生成R.java文件。 这要问太多了吗?

Android MVP从Presenter打开Activity,反模式?

如果从Presenter层打开一个Activity它会是一个反模式吗? 如果是这样,我应该从视图层管理应用程序的导航吗?

如何在没有Dagger的MVP中使用共享首选项并且不会导致Presenter依赖于上下文?

我正在尝试在没有Dagger的情况下实现MVP(用于学习目的)。 但我遇到了问题 – 我使用Repository模式从缓存(共享首选项)或网络获取原始数据: Shared Prefs| |RepositoryModelPresenterView Network| 但要把我的手放在共享首选项上,我必须把它放在某个地方 presenter = new Presenter(getApplicationContext()); 我使用onRetainCustomNonConfigurationInstance / getLastCustomNonConfigurationInstance对来保持Presenter“保留”。 public class MyActivity extends AppCompatActivity implements MvpView { @Override protected void onCreate(Bundle savedInstanceState) { //… presenter = (MvpPresenter) getLastCustomNonConfigurationInstance(); if(null == presenter){ presenter = new Presenter(getApplicationContext()); } presenter.attachView(this); } @Override public Object onRetainCustomNonConfigurationInstance() { return presenter; } //… } […]

android模型视图演示者/控制器示例

有没有关于如何最好地在任何地方构建Android应用程序的好例子或教程? 我是java和android的新手,我使用asp.net中的模型视图演示器和模型视图控制器的被动和监督控制器变体构建了winforms应用程序,但没有真正看到任何使用这些模式的android上的示例或代码。 人们如何在野外构建体面大小的Android应用程序。 有没有最好的做法,或者我应该严格坚持官方的Android文档。

我可以注册MVP Presenter里面的片段

我一直在关注Google提供的MVPdevise模式,以重构我的应用程序。 我有一个MainActivity和许多碎片,对于每个片段创build活动似乎都很麻烦,所以我一直在考虑在片段中注册演示者。 我看到的是每个片段都注册了它自己的主持人,但是我不确定它有多less错误… 🙂 所以这里是我的演示者: public class FirstPresenter implements FirstContract.Presenter { private final FirstContract.View mView; public FirstPresenter(FirstContract.View view) { mView = view; } @Override public void start() { Log.e(TAG, "Start"); } } 这是我的片段: public class FirstFragment extends Fragment implements FirstContract.View { private FirstContract.Presenter mPresenter; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container , Bundle savedInstanceState) […]

匕首2和界面的实现

我有一个简单的Dagger 2testing设置,基于http://konmik.github.io/snorkeling-with-dagger-2.html 。 它注入一个PreferenceLogger,输出所有的偏好。 在注入的类中,我可以@注入更多的类。 public class MainActivity extends Activity { @Inject PreferencesLogger logger; @Inject MainPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { MyApplication.getComponent().inject(this); presenter.doStuff(); logger.log(this); } } public class PreferencesLogger { @Inject OkHttpClient client; @Inject public PreferencesLogger() {} public void log(Contect context) { // this.client is available } } 当我运行这个,logging器被设置,并在PreferencesLogger.log OkHttpClient被正确设置。 所以这个例子按预期工作。 现在我正在尝试获得一个MVP结构。 有一个MainPresenter接口和一个实现。 […]

Android MVP解释

我试图了解什么是最好的方式来编写一个“干净的”Android应用程序。 我发现了一篇关于它在哪里使用3层架构的有趣文章 。 现在我读了一下,android使用MVPdevise模式并试图理解这一点。 我理解MVP原则(在android环境中)的方式是: 模型层是逻辑类 主持人是“链接到”XML(活动)的类, 被动的观点是XML的。 它是否正确? 如果这是正确的, 那么 3层模型是否完全符合MVP原则也是正确的 ,因为: 来自3层架构的表示层适合MVP的演示者层 来自三层架构的业务和数据层完全符合MVP的模型部分? 我希望我的问题很清楚,因为这对我来说是一个复杂的话题。 也许这清除了我的视野(想法)关于这个..

主持人用匕首注射2

我刚开始使用匕首2,我发现在线数以千计的指导每一个不同的实现,我现在有点困惑。 所以基本上这就是我现在写的: AppModule.java: @Module public class AppModule { Application mApplication; public AppModule(Application application) { mApplication = application; } @Provides @Singleton Application providesApplication() { return mApplication; } } DataModule.java: @Module public class DataModule { private static final String BASE_URL = "http://beta.fridgewizard.com:9001/api/"; @Provides @Singleton NetworkService provideNetworkService() { return new NetworkService(BASE_URL); } @Provides @Singleton SharedPreferences provideSharedPreferences(Application app) { […]

Android MVP – 活动应该是视图还是演示者?

我想用MVP模式实现我的下一个应用程序,所以我开始阅读一些关于如何实现的文章。 对我来说主要的问题是这种模式有不同的方法。 有人说我们应该把活动当作一种看法,但其他一些活动应该是一个主持人。 作为一个视图的活动在这里描述: MVP Android和它是有道理的。 但另一方面,我发现这个答案与几个upvotes https://stackoverflow.com/a/7609943和有人说,活动应该是一个主持人。 有没有人有这种模式的经验?

Dagger 2中的Android MVP – 具有多个片段的活动

我一直在寻找与Dagger 2 MVP的谷歌Android架构示例: https://github.com/googlesamples/android-architecture/blob/todo-mvp-dagger/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksActivity.java 但是,这个例子并不重要 – 每个Activity只有一个片段,而Dagger组件是在Activity中构build的,并且用于为片段的Presenter注入Activity。 我已经尝试过构build这个示例,将多个片段添加到一个活动并在它们之间导航。 由于每个片段都有自己的演示者,所以我将匕首组件构build到片段中。 所以现在我有: FragmentCallback(提供加载fragment1和fragment2的方法的接口) 活动(实现FragmentCallback) Fragment1(实现视图界面) Fragment1Contract(定义视图和演示者界面) Fragment1Presenter(实现演示者界面) Fragment1Component(注入Fragment1) Fragment1Module(提供视图和演示者) Fragment2 Fragment2Contract(定义视图和演示者界面) Fragment2Presenter(实现演示者界面) Fragment2Component(注入Fragment2) Fragment2Module(提供视图和演示者) 该活动做的很less,它只是加载第一个片段,并实现视图可以用来切换到另一个片段的FragmentCallback。 第一个片段有一个button,它使用FragmentCallback加载第二个片段 – 片段通过投射Activity来获取片段 public void onAttach(Context context) { super.onAttach(context); callback = (FragmentCallback) context; } 我在这里的一个明智的轨道? 虽然代码看起来干净的MVP我缺less一些匕首组件和模块? 谢谢。 更新 通过为活动创build一个组件和模块,我已经改善了一些情况。 每个片段仍然构buildDagger上下文,但是我不再在演示者构造函数中注入视图(片段) – 当片段构build上下文时,自身注入(因此它具有演示者),然后调用presenter.init(this)让主持人现在有了这个看法。 这很好地减less了类的数量,下一步就是只尝试在活动中构build组件,并让片段使用它来注入自己(而不必构build新组件)。