ViewPager和当前Fragment之间的通信

3

我正在使用 ViewPager (http://developer.android.com/reference/android/support/v4/view/ViewPager.html) 来展示一些图片碎片,因为我希望支持缩放,所以我扩展了 ViewPager 并重写了以下方法:

onInterceptTouchEvent

下一步是确定图像是否被放大。如果它被放大了,我会让它处理事件,否则我会将事件传递给父类。我的主要问题,也是我的问题的核心,是确定当前片段与我的ViewPager之间进行通信的最佳和最有效的方法是什么?目前,当当前项更改时,我正在使用以下内容:
Fragment photoFrag = (Fragment) getAdapter().instantiateItem(this, getCurrentItem()); 

但是感觉在Fragment和ViewPage之间应该有更好的沟通方式,我可能漏掉了什么。

编辑:不好意思,我忘记提到我希望双向沟通,所以我希望Fragment能够与ViewPager通信,ViewPager也能与Fragment通信。我看到了一个示例(网址留在办公室),其中使用了接口类来在当前Fragment和ViewPager之间通信。因此,底层图像需要告诉ViewPager何时处理滚动,何时不需要处理,以及何时模拟滚动等。

我匆忙在Android Hangout上发布了这个问题。

谢谢。


1
对于稍微好一点的恶意黑客,请参见https://dev59.com/vGoy5IYBdhLWcg3wFqFT#9293207。 - CommonsWare
1
@CommonsWare 感谢您的提示,两种方法看起来非常相似,因为 instantiateItem 在内部基本上执行相同的操作。奇怪的是没有更简洁的方法来做到这一点。 - selsine
1
很奇怪没有更简洁的方法来做这个。-- 同意。 - CommonsWare
@CommonsWare 很抱歉错过了你的评论。我没有使用那篇博客文章作者使用的哈希映射方法。我在其他地方看到过它,但对于我所做的事情来说有点过度。此外,我需要我的片段被垃圾回收。 - selsine
很奇怪没有更简洁的方法来完成这个任务。同意。另外,该死的android.support.v4 v7 v1000,该死的viewpager,该死的fragment等等。 - thecr0w
显示剩余3条评论
1个回答

2
为什么不使用BroadcastReceiver来发送/接收事件?将片段注册以接收事件,这样您就不必担心片段不存在的问题。别忘了在onResume/onPause中注册/取消注册接收器。

2
好主意,用大锤砸小坚果,这就是安卓的方式吗? - thecr0w
1
那有什么“过于粗暴”的呢?代码非常简洁,模式清晰且合法。 - Bostone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接