Articles of mvp

如何在MVP中将适配器与Presenter连接?

在RecyclerView中,我有一个带有VideoView的ViewHolder和带有状态的按钮“Like”(选择与否)。 我的Presenter有一个方法可以更新模型中的“Like”状态 – VideoEntity。 在回调中,我需要更新View form Presenter,所以我调用了getView()。updateItem(VideoEntity实体)。 之后,我应该findrecyclerView实体位置,并使项目无效。 所以我想避免这种情况。 在经典架构中,我可以从ViewHolder中调用一些方法,在那里获得一些回调并更新已更改的数据。 如何将此伪代码迁移到MVP模式? @Override public void onBindViewHolder(ContainerViewHolder holder, int position) { … rx.subscribe(result -> holder.update(result)); } @Override public void onViewRecycled(ContainerViewHolder holder) { if (haveBackgroundRequests) { rx.unsubscribe(holder); } }

Android应用程序中的RxJava和MVP

我正在尝试使用MVP架构在Android应用程序中实现一个屏幕,并在View端使用RxJava和RxBinding。 基本上我有2个Spinners,1个TextEdit和一个默认禁用的按钮。 我想在Spinners选择了项目且文本字段不为空时启用按钮。 这是代码: Observable.combineLatest( RxAdapterView.itemSelections(mFirstSpinner), RxAdapterView.itemSelections(mSecondSpinner), RxTextView.textChanges(mEditText), new Func3() { @Override public Boolean call(Integer first, Integer second, CharSequence value) { return !TextUtils.isEmpty(value); } }).subscribe(new Action1() { @Override public void call(Boolean enable) { mButton.setEnabled(enable); } }); 现在的问题是如何将其整合到MVP模式中。 理想情况下,启用按钮的“业务逻辑”应该在演示者中。 实现这一目标的最佳方法是什么? 我想以某种方式将原始观察者传递给演示者(侧面问题是如何?),演示者将组合这些观察者,并且它将具有启用按钮的逻辑。 最后,它只会调用View来修改按钮状态。 还有更好的选择吗? 在View端有没有RxJava MVP的好例子?

在MVP结构中哪个类负责保存列表项以及如何通知数据更改

我试图重构我的一个活动类来实现mvp(使用mvp mosby库)。 我有一个RecyclerView,在这个视图中有一些项目在运行时会对它们进行一些更改。 例如,我做了一些I / O操作并改变了一行。 我认为将我的项目保留在演示者课程中会更好; 这是什么最好的做法? 将此保留在1)演示者或2)活动中或3)仅保留适配器中的视图相关项和演示者中的所有其他项。 活动现在直接保留项目并更改活动中的项目行,然后通知适配器。 是不是更好地在适配器类中移动所有这一行并通知适配器类中的适配器? 例如,我想要一些row.where的更改图标,哪个类负责? 适配器? 活动? 现在我想在适配器中实现它: changeItemIcon(int position, int iconRes){ mImages.get(position).setICon(iconRes); notifyItemChanged(position); } 我在活动上调用此方法并从演示者调用活动方法。 好吗? 这样做的最佳做法是什么? UPDATE 我也发现这个问题( 使用RecyclerView适配器更新数据的最佳方法 ),使用适配器方法更改项目。 但修改呢? 我需要继续参考我活动中的项目吗?

在MVP模式中,适配器是否应该保持模型,或者演示者是否应该持有模型并让适配器引用它?

目前我有它,以便适配器引用其中的所有模型。 但让演示者只持有模型并且适配器可以简单地引用它们是否更好? 例如: public class Adapter extends RecyclerView.Adapter{ private Presenter presenter; public Adapter(Presenter presenter){ this. presenter = presenter; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { Model m = presenter.getModels().get(position); // bind model to view holder } @Override public int getItemCount() { return presenter.getModels().size(); } } 这样,当Presenter获取更多模型时,它只需调用getAdapter().notfiyDataSetChanged(); 取之后。

适配器在Mvp模式中的作用?

你如何对待MVP模式中的适配器? 例如,在这个项目https://github.com/msahakyan/nested-recycler-view中有一个MovieAdapter, https://github.com/msahakyan/nested-recycler-view/blob/master/app/src/ main / java / com / android / msahakyan / nestedrecycler / adapter / MovieAdapter.java这个家伙有一个recyclierview作为这个适配器的项目,(如果你看看他的项目,他已经在他的主屏幕上嵌套了recyclierview。)因为他有这样的一个项目,他进行服务调用和其他通知,加载数据(从服务中获取)等操作在这个适配器中。(没有通信到相关的片段/活动)正如你所看到的,这个适配器有很多工作要做。 如果你这样做,你将如何在mvp模式中实现这一点? 具体来说,在这种情况下,你会在适配器中有presenter对象,还是有视图对象来进行调用,通知和加载?

是否有RxJava等效的Handler.postDelayed(Runnable r,long delayMillis)

我试图调用一个返回void(Java原始types)的方法。 我想延迟调用一个预定义的毫秒数。 我知道这可以简单地使用Handler完成,我宁愿不使用它。 我试着做: Observable.just(getView().setAttachments(attachments)).delay(50, TimeUnit.MILLISECONDS); 但是,有一个编译错误,即: Observable.just(java.lang.Void) cannot be applied to (void) 还有另一种方式吗? 我不想使用Handler是代码是在Presenter(MVP模式)中定义的,我不想在Java类中使用Android特定代码。 我希望它是一个冷的Observable,因为我不必订阅它,只调用该方法一次。

在MVP上下文中使用Service作为Presenter是一个好主意

简短说明我的问题是:在MVP架构中,使用服务作为演示者来控制实现为服务的模型是个好主意吗? 替代问题:使用服务来控制另一个服务是一个好主意吗? 上下文: 我正在编写一个与蓝牙传感器通信的应用程序。 该应用程序有一个服务 (也称为BluetoothService ),它可以建立连接并管理与传感器的通信。 该应用程序有几个片段,但只有少数与蓝牙传感器的操作有关。 用户应该能够开始操作,导航到不同的片段,然后观察传感器完成的操作的结果。 我的目的: 我想编写一个组件(也称为BluetoothController ),它在传感器(由我的应用程序由BluetoothService )和应用程序的其余部分之间建立链接。 BluetoothController包含描述传感器必须完成哪种操作的对象(只有一个操作,串行操作,操作types……),因此BluetoothController的目的是让操作独立于蓝牙传感器然后能够用模拟蓝牙类测试应用程序。 我将BluetoothService视为模型,将BluetoothController视为演示者,我错了吗? 为何选择服务: 因为如果用户在片段之间导航,它不会死亡 因为它可以通过bindService通过整个应用程序bindService 因为bindService是唯一的入口点,我想我可以控制一次只完成一个操作 因为我将Service视为活动组件,所以即使没有任何绑定数据,它也可以继续接收数据 这项服务既可以启动也可以绑定(如音乐播放器): 即使没有绑定任何组件也能继续运行, 轻松沟通 所有服务都将在应用程序进程中,以便在没有绑定程序的情况下完成通信,而不是方法调用 任何建议都会非常感谢,提前感谢 为什么不是别的东西: RetainedFragment(对我来说)只是容器 pojo presenter只是视图和模型之间的网关,如果它们没有附加到视图,它们应该会死掉。 结论 我错了吗? 你觉得这个架构有困难吗? 是否有更适合我目的的其他Android组件? 任何建议都将受到高度赞赏,谢谢你的进步

如何使用第三方SDK关注MVP架构?

我见过很多项目,展示了如何在MVP中实现登录,但找不到与Google / Facebook登录相关的任何内容。 在登录流程强烈绑定到Android组件生命周期的情况下,我们应该怎么做? 我看到MVP的主要好处在于我们在Context之上构建了一个抽象,但是当我们需要关注时,这个抽象会显得过于复杂,例如,Facebook登录流程:你需要用CallbackManager注册FacebookCallback ,调用logInWithReadPermissions() (传递) Activity / Fragment to it),将onActivityResult()委托给callbackManager ,这将触发FacebookCallback的方法。 我的想法是创造类似的东西 interface AuthInteractor { void doFacebookLogin(); void doGoogleLogin(); } GoogleApiClient了解Context并初始化GoogleApiClient 。 它将在Presenter中注入,但是所有这些回调(特别是在Facebook的SDK中)的东西将变得太复杂。 在这种情况下省略MVP不是更好吗?

如何使用Dagger 2将多个组件注入同一个对象

所以我有一个ApplicationComponent用于将单例注入到我的片段和演示者中,但我正在尝试创建一个组件以注入AppComponent所做的同一个演示者。 沿着这些方向的东西。 @Component{modules = FileManagerModule.class} public interface FileManagerComponet { public void inject(MyPresenter presenter); } @Component{modules = AppModule.class} public interface AppComponent { public void inject(MyPresenter presenter); } @Module public class AppModule { private Context appContext; @Provides @Singleton public SharedPreferences preferences() { return appContext.sharedPreferences(); } … } @Module public class FileManagerModule { private Context activityContext; @Provides public […]

Android MVP:一个包含多个片段的活动

我有一个Activity,它托管多个片段,用于定义用户注册流程中的每个步骤。 流程很复杂,下一步由前面步骤中的用户操作定义。 流程如下: MainActivity | Fragment1 –> Fragment2 –> Fragment3 –> Fragment4 \ –> Fragment5 –> Fragment6 在MVP之后,我为每个片段提供了View&Presenter。 我担心的是如何以MVP方式在Fragment和Activity之间进行通信。 每个Fragment的结果都需要可供Activity使用,以决定接下来需要显示哪些Fragment。 我想到的一种方法是为每个片段定义一个由Activity实现的监听器。 我以某种方式发现这有点难看,因为最终Activity需要实现其中的6个并且看起来不可扩展。 什么是更好的方法?