首頁  >  問答  >  主體

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

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

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

ringa_leeringa_lee2766 天前859

全部回覆(3)我來回復

  • 阿神

    阿神2017-04-17 15:02:42

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

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:02:42

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

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:02:42

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

    回覆
    0
  • 取消回覆