- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对基本相同的数据有 2 个 View :
以上都是使用加载器模式获取相同的数据(扩展LoaderCallbacks,查询ContentProvider等)
两者都托管在一个 activity 中在 ViewPager 中。
为这两个 fragment 同步当前选择的列表项/标记的最佳策略是什么? (想想“我的地点”编辑 UI,或 Google map 的“方向”,其左侧 Pane 和中间的 map )。
到目前为止我想到的场景:
也许有人已经处理过这个确切的案例? (我一定会找到一些解决方案,只是想避免“重新发明轮子”。抱歉,这个问题过于概念化。)
编辑(解决方案)
我认为 Maciej 已经回答了我的确切问题(“最佳策略”,等等),所以答案是 1 和 2 ;-)
进入更多细节,我的实现是这样的:
起初,我对在 Java 中处理发布者/订阅者模式的巨大开销感到害怕(涉及接口(interface)、为回调找到合适的位置,以及其他不相关的内容)。还好,Otto总线实现引起了我的注意,这使得 fragment 之间的通信变得微不足道。不仅可以将选择更改通知所有订阅者,而且整个 Loader Patter 也非常适合:
从 Otto 的示例代码中借用 BusProvider 类。
创建一些消息合约来携带通知数据:
public class LocationSelectedEvent {
public long id;
}
public class LocationsLoadedEvent {
public Cursor cursor;
}
使用@Subscribe 注释 fragment 中的“receiver”方法(下面的示例是针对加载程序的情况,对于选择更改它不再复杂):
@Subscribe
public void onLoadFinished(LocationsLoadedEvent event) {
final CursorAdapter a = (CursorAdapter) getListAdapter();
a.swapCursor(event.cursor);
}
让 fragment “监听”通知:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
BusProvider.getInstance().register(this);
}
让 fragment 在不“活跃”时停止监听(对于 fragment API 尤其如此,通过艰难的方式学习):
@Override
public void onDestroy() {
super.onDestroy();
BusProvider.getInstance().unregister(this);
}
最后,在需要的地方触发通知(下面的示例说明了如何在加载光标时从 LocationList Activity 通知):
@Override
public void onResume() {
if(null == getLoaderManager().getLoader(0)) {
getSupportLoaderManager().initLoader(0, null, new LoaderCallbacks<Cursor>() {
@Override
public Loader<Cursor> onCreateLoader(int paramInt, Bundle paramBundle) {
return new CursorLoader(LocationsList.this, Locations.CONTENT_URI, null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> paramLoader, Cursor cursor) {
BusProvider.getInstance().post(new LocationsLoadedEvent(cursor));
}
@Override
public void onLoaderReset(Loader<Cursor> paramLoader) {
BusProvider.getInstance().post(new LocationsLoadedEvent(null));
}
});
}
super.onResume();
}
奖励:通知流可视化
最佳答案
对于点击协调,你的第 1 点是我会做的,当然是使用 Activity 和界面。
我很难理解为什么要从 ContentProvider
加载相同的数据两次。为什么不在共享对象中加载一次呢? Application
中的某个对象,注入(inject)单例甚至另一个 Fragment
,它通知 Activity
数据加载完成并将数据推送到您的两个 fragment
?
关于android - 同步 ListFragment 和 SupportMapFragment 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16688073/
我在一个 Activity 的两个不同 fragment 中使用两个 SupportMapFragment 时遇到奇怪的问题。 实际上,我的问题是在 OneFragment 中添加了 SupprtMa
我有 adt x86-64 mac 操作系统。我做了 maps v2 文档中的所有内容,但我仍然得到: 09-28 03:07:11.755: E/AndroidRuntime(549): Cause
当我在运行时用 SupportMapFragment 替换容器时,它不会填充 Parent。它仅部分占据屏幕。 HomeActivity2.java package com.example.mapde
是否可以检测 SupportMapFragment 的 OnScrollGesture 监听器。这是我一段时间前尝试解决但找不到解决方案的问题。我正在尝试检测用户是否滚动。我不想检查相机更新或位置更改
我正在做一个项目,我想在 fragment Activity 中显示 map fragment ,这就是我使用以下内容的原因, public class VenueMapFragment extend
我正在创建一个简单的应用程序,它在选项卡中使用谷歌地图,在其他选项卡中使用其他内容。问题是当我改变方向时 map 会重新创建,所以我转到 latlng 0,0 这是我的代码 MainAcitivy.j
我在我的代码中为 map 使用 SupportMapFragment (class="com.google.android.gms.maps.SupportMapFragment")。 当我将我的应用
我正在使用基于 map 的应用程序创建包含 map 和 Web View 的相册 View 。该问题发生在轮换期间,并且在 com.android.support:support-v4:19.1 上运
我正在尝试让 Google Maps Android API v2 在 HTC Desire 上的 Android 2.2 上运行。 我的 main.xml 包含以下内容:
我恳请您提供任何帮助,我已经为这个问题伤透了两天了,在解决这个问题之前我无法继续:/ 嗯,我正在尝试使用抽屉导航实现 GoogleMap,并且我勉强做到了这一点,但效果不太好。 这是我的类和 xml-
我有一个 GoogleMap,由 SupportMapFragment 类生成。有时,我有另一个 fragment 作为覆盖,其中包含有关特定位置的一些详细信息。但是,我可以通过带有详细信息的 fra
我正在尝试使用此覆盖 SupportMapFragment 上的 setOnMyLocationChangeListener map.setOnMyLocationChangeListener(new
我目前正在尝试将谷歌地图包含到我的应用程序中。主要目的是在加载 map 后自动将相机移动到具有缩放功能的设备当前位置。 为此,我需要一个位置管理器。在下面的代码中,我试图实现一个,但没有成功。我还尝试
我想显示 supportMapFragment 来填充我的主要 Activity ,顺便说一句,我在运行时请求了位置权限并且已成功授予。发生的事情是我得到的是空白的 map View ,没有其他任何东
我正在向屏幕添加另一个片段。此屏幕在 SupportMapFragment 中已有 en MapView,因此添加的 Fragment 应位于 MapView 之上。这个新 View 覆盖了屏幕的 2
mapFragment.getMapAsync(this) 在 map 中返回 null 我正在尝试设计一个带有谷歌地图和抽屉导航的应用程序,我不断收到尝试在空对象引用上调用虚拟方法“void com
我正在使用 FragmentTabHost 开发一个选项卡式应用程序。我的一个选项卡( fragment )是一个 map (扩展 fragment ),我只能在第一次选择它时看到,如果我选择其他选项
我需要在Dialog 中嵌入一个SupportMapFragment。这是我能想到的最好的: public class SupportMapFragmentDialog extends DialogF
我正在尝试让 SupportMapFragment 具有自定义布局,现在以下代码有效: @Override public View onCreateView(LayoutInflater inflat
我正在尝试在 fragment 中使用 SupportMapFragment。第一次启动时, map 显示没有任何错误。 但是当我对另一个 fragment 执行事务,然后返回到 map 时,我有一个
我是一名优秀的程序员,十分优秀!