android - 如何在ViewPager中的各个Fragment间传递数据并刷新Fragment界面?
ringa_lee
ringa_lee 2017-04-17 15:00:42
0
3
855

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

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

ringa_lee
ringa_lee

ringa_lee

全部回覆(3)
阿神

如果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

PHPzhong

用代理模式實現反向傳值。

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自己)過去就可以了。

大家讲道理

   可以使用bundle進行參數傳遞,在兩個Fragment跳轉的時候可以帶上參數,在另一個Fragment取得參數的方式只需要使用getArguments().getString("key");  key是自己定義的一個標識,參數的形式只要bundle能傳遞都可以實現 這個原理和Activity基本上是一樣的
例如:
Bundle bundle=new Bundle();
bundle.putString("key", Projsid) ;
fragment.setArguments(bundle);                 fragment.commit();  

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!