在片段中刷新片段

Refresh fragment in fragment

如何在父片段中刷新我的片段(图表片段)?
我试着像 this 那样做,但它不起作用。

Java(刷新方式):

Fragment fragment = getChildFragmentManager().findFragmentById(R.id.statistic_order_fragment);
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.detach(fragment);
    fragmentTransaction.attach(fragment);
    fragmentTransaction.commit();

XML:

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView xmlns:card_view="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <fragment
                android:id="@+id/statistic_order_fragment"
                android:tag="ORDER"
                android:name="com.readyscript.dk.storemanagement.Statistic.StatisticOrderFragment"
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:layout_gravity="center_horizontal"
                card_view:layout="@layout/fragment_statistic_order" />

            <fragment
                android:id="@+id/statistic_sum_fragment"
                android:tag="SUM"
                android:name="com.readyscript.dk.storemanagement.Statistic.StatisticSumFragment"
                android:layout_width="match_parent"
                android:layout_height="300dp"
                android:layout_gravity="center_horizontal"
                card_view:layout="@layout/fragment_statistic_sum" />

            <fragment
                android:id="@+id/statistic_check_fragment"
                android:tag="CHECK"
                android:name="com.readyscript.dk.storemanagement.Statistic.StatisticCheckFragment"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:layout_gravity="center_horizontal"
                card_view:layout="@layout/fragment_statistic_check" />

        </LinearLayout>
    </ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>

当我使用 SwipeRefreshLayout 时,我需要在不重启父 Fragment 的情况下刷新所有 3 个 Fragment。

我认为问题在于您将片段静态放置在 xml 文件中。更好的方法是在 xml 中放置 <FrameLayout> 而不是 <fragment> 标签。然后,在您的 class 中,以编程方式添加片段,并根据需要替换它们。

如果您需要我向您展示执行此操作的代码,请告诉我。

使用 getChildFragmentManager() 代替 getFragmentManager()

Child Fragment Manager 就是用来管理fragment 内部的fragment,而Fragment Manger 是用来管理Activity 内部的fragment。

替换,

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();

有了这个,

FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();

经过这么多编码... 我找到了解决方案..

 getActivity().getSupportFragmentManager().beginTransaction().replace(**containerId**,
                    new **NameOfCurrentFragment**).commit();

刷新片段调用下面的方法

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);

  // Refresh tab data:

  if (getFragmentManager() != null) {
    getFragmentManager()
      .beginTransaction()
      .detach(this)
      .attach(this)
      .commit();
  }
}