如何在ViewPager中的各个Fragment间传递数据并刷新Fragment界面?

发布于 2022-09-01 21:56:10 字数 230 浏览 32 评论 0

tablayout+viewpager+fragment实现的下图的效果,怎么在各个Fragment中传递数据并刷新界面?

Image

如图中,点击“菜单”中的按钮,如何在购物车中接收并刷新界面。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

您的好友蓝忘机已上羡 2022-09-08 21:56:10

如果Fragment已经存在,试图通过fragment.setArguments(bundle)传递参数将导致异常:

12-02 00:14:55.375: E/AndroidRuntime(8492): java.lang.IllegalStateException: Fragment already active
12-02 00:14:55.375: E/AndroidRuntime(8492):     at android.support.v4.app.Fragment.setArguments(Fragment.java:548)

我更新Fragment的常用办法是,为Fragment定义一个public的方法:

// To update fragment in ViewPager, we should implement a public method for the fragment,
// and do updating stuff in this method.
public void updateDate(Date date) {
    mDate = date;
    mTextView.setText(mDate.toString());
}

然后获取需要更新的Fragment,再然后调用这个方法。
考虑到你只有4个Fragment,可以尝试在activity内用一个Array或者List保存这4个fragment的实例(这种法子比较笨)。
而且需要使用FragmentPagerAdapter,而不是FragmentStatePagerAdapter,这样在ViewPager中切换页面时,fragment的实例也不会被销毁。可以参考我的这篇文章 如何更新及替换ViewPager中的Fragment

燃情 2022-09-08 21:56:10

用代理模式实现反向传值。

activity相当于这些fragment的父集,在activity里面操作这些fragment肯定是很轻松的(因为fragment都是在activity里new出来的)。所以如果你的一个fragment能拿到activity的话。就可以很轻松的操作其它fragment了。

最简单的方法你可以在fragment中添加一个activity的属性。在activity中new那些fragment的时候,把activity.this传给fragment。

不过一般是让activity实现一个接口,比如说XXDelegate,fragment的构造函数都有一个XXDelagate。在activity创建的时候还是传this(activity自己)过去就可以了。

一直在等你来 2022-09-08 21:56:10

   可以使用bundle进行参数传递,在两个Fragment跳转的时候可以带上参数,在另外一个Fragment获取参数的方式只需要使用 getArguments().getString("key");  key是自己定义的一个标识,参数的形式只要bundle能传递都可以实现 这个原理和Activity基本是一样的
例如:
Bundle bundle=new Bundle();
bundle.putString("key", Projsid);
fragment.setArguments(bundle);                 fragment.commit();  

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文