Stu*_*DTO 6 android google-maps rx-java dagger-2 android-mvp
我有一个应用程序,从现在开始我的api填充了一个列表.现在我正在检测onClick recyclerView,我想打开GoogleMaps一个标记,专注于我点击的项目(我有lat和long).有没有一个很好的方法用它的存储库,用例,模型等来做到这一点?
事情就是我在我的ModelView上有它的坐标,以及cat的类型,也就是id.
问题是我不知道要向其他活动发送什么,因为每次我进行api调用时数据都会发生变化,所以我不知道是否必须将它存储在任何地方,然后从listView显示数据然后创建一个刷新我可以从api重新启动数据的mapActivity上的按钮.
希望你能理解我的问题.
我正在关注的一个例子是:GitHub存储库这是我作为列表所拥有的,然后当点击一个项目时它应该打开地图.
当我点击列表中的某个项目时,我最终通过了列表(如果您有任何其他方式,请随时告诉我)
然后我创建了一个合同:
interface Presenter{
fun onMapReady()
}
interface View{
fun focusOnItem(latitude: Double, longitude: Double)
fun putMarkers(mList)
}
Run Code Online (Sandbox Code Playgroud)
然后我不知道rxJava我的演示者在哪里使用,因为我需要等到我为我的演示者设置视图和数据的东西,当我填满所有然后首先开始做putMarkers,然后focusOnItem,但我坚持这个.
所以我现在正在做的是从mapActivity我设置列表然后我想开始做这个工作.
从开始我有一个活动(从Github仓库几乎相同,然后我需要将列表传递给我的其他活动,我最终做了一个设置者到一个演示者,因为匕首不知道该列表所以,我的问题现在我如何用rxJava设置所有MVP来加载地图并在其上加载标记.它还应该缩放到点击的元素但我已经有了位置.
有了一个简单的伪如果你说服自己这样做我会接受你的答案是正确的,我只需要弄明白如何在rxJava中做到这一点.
您不应该将大量数据从一个活动传递到另一个活动,因为您可以轻松达到它们之间可以传递的最大数据量。
相反,您应该更好地将数据保存在为一个活动分类的模型中(例如,包含列表的活动),然后仅将某些项目 ID 传递给另一个活动。第二个 Activity(更准确地说,它的演示者)应该获取 id 并从模型中查询所需的对象。
总的来说,调用链将如下所示:
具有项目列表的活动会在创建该项目时下载该项目。下载在调用 Interactor/UseCase 或直接存储库的 ItemsListPresenter 中启动。
使用存储库以某种方式缓存下载的项目。
结果,我们设法打开一个包含所有点的屏幕,并将重点关注用户选择的点。
您可以在这里找到一个基于 Clean Architecture 方法并使用 MVP 模式和 RxJava 2 创建的简单 Earthquakes 应用程序: https: //github.com/Gaket/Earthquakes
更新:
更准确地说,你可以这样做(伪代码):
class Presenter extends IPresenter {
Model model;
View view;
List<Item> elements;
Item selectedElement;
void setSelectedItem(String id) {
element = model.getElement(id);
}
void start() {
// if you need to make an api call - do it here
model.getElements().subscribe(elements -> this.elements = elements);
}
void onMapReady() {
view.showElements(elements);
view.focus(selectedElement);
}
}
class MapActivity implements View {
IPresenter presenter;
void onCreate(...) {
// start your map fragment
String id = // get id from Intent
presenter.setSelectedItem(id);
presenter.start();
}
void putMarkers(List<Item> elements) {
// put your markers as usual
}
void focusOnItem(Element element) {
// and focus works the same. The only question is if you want to send an Element object here or particular coordinates. Both variants work.
}
@Override
void onMapReady(GoogleMap map) {
// save map
presenter.onMapReady();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |