刷新片段

时间:2016-09-12 15:18:43

标签: android android-fragments swiperefreshlayout

如何刷新父片段中的片段(图表片段)? 我试过像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时,我需要刷新所有3个片段而不重新启动父片段。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

使用getChildFragmentManager()代替getFragmentManager()

Child Fragment Manager正是用于管理片段内的片段,而Fragment Manger则用于管理Activities内的片段。

替换,

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();

有了这个,

FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();

答案 3 :(得分:1)

刷新方法下面的片段调用

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

  // Refresh tab data:

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