【问题标题】:Communication between ViewPager and current FragmentViewPager 和当前 Fragment 之间的通信
【发布时间】:2012-03-21 21:45:18
【问题描述】:

我正在使用 ViewPager (http://developer.android.com/reference/android/support/v4/view/ViewPager.html) 和片段中的一些图像,并且因为我想支持缩放,所以我正在扩展 ViewPager 并覆盖:

onInterceptTouchEvent

接下来就是判断图片是否放大了,如果放大了就让它处理事件,否则就把事件传给super。

我的主要问题,也是我问题的核心,是确定当前片段和我的 ViewPager 之间的最佳和最有效的通信方式?

目前我在当前项目更改时使用以下内容:

Fragment photoFrag = (Fragment) getAdapter().instantiateItem(this, getCurrentItem()); 

但感觉好像应该有更好的方式在 Fragment 和 ViewPage 之间进行通信,但我遗漏了一些东西。

编辑:抱歉,我确实忘记提及我希望通信来回,所以我希望片段能够与 ViewPager 和 Pager 通信与片段。我看到了一个示例(工作中的 URL),其中使用接口类在当前 Fragment 和 ViewPager 之间进行通信。所以底层图片需要告诉 ViewPager 什么时候应该处理 Scroll,什么时候不需要,什么时候伪造滚动等等。

我在 Android 环聊期间急于提出这个问题

谢谢

【问题讨论】:

  • 对于一个稍微好一点的讨厌的黑客,请参阅stackoverflow.com/a/9293207/115145
  • @CommonsWare 感谢您的提示,这两种方法看起来非常相似,因为 instantiateItem 在内部几乎做同样的事情。奇怪的是没有更清洁的方法来做到这一点。
  • “奇怪的是没有更干净的方法来做到这一点。” -- 同意。
  • 这是我很多代码的基础:multitouchdesign.wordpress.com/2011/11/19/…
  • 不要将其与FragmentStatePagerAdapter 一起使用。 FragmentStatePagerAdapter 背后的要点是允许不可见的碎片被垃圾收集。您链接到的解决方案中的HashMap 将禁止此操作。您可以通过使用地图的 SoftReference 值来实现它。

标签: android fragment android-viewpager


【解决方案1】:

为什么不使用BroadcastReceiver 来发送/接收事件?注册片段以接收事件,然后您不必担心您的片段不存在。不要忘记在 onResume/onPause 中注册/注销接收器

【讨论】:

  • 好主意,用大锤敲碎坚果,这就是android的方式吗?
  • 那是什么“大锤”?代码非常少,模式干净合法
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
相关资源
最近更新 更多