如何使子片段从它的父片段刷新

时间:2018-06-08 04:13:16

标签: java android fragmentmanager

你好我有片段和里面的viewpager有2个标签我需要当我按下父片段中的按钮刷新视图页面内的子片段 我使用它来刷新相同的片段,它工作正常

        FragmentTransaction ft1 = getFragmentManager().beginTransaction();
        ft1.detach(this).attach(this).commit();

我尝试了相同而不是这个我把childfragment.newInstance()放仍然没有刷新所以任何建议?

1 个答案:

答案 0 :(得分:0)

  1. 在子片段中创建一个界面。    RefreshInterface

  2. 在子片段中创建一个方法,将对象分配给RefreshInterface。    intialiseRefreshInterface(RefreshInterface refreshInterface)

  3. 在刷新点击内调用接口方法。

  4. 在Parent片段中实现子片段接口并覆盖该方法。

  5. 在commit()之前从父片段中获取子片段     1.创建一个子对象的对象     2.调用intialiseRefreshInterface(RefreshInterface refreshInterface)     3. commit()子片段。

  6. 您的子片段将刷新[子片段将为popBackStack()并重新创建。

  7. 以下示例代码将帮助您实现您的要求

    父级片段

    <强> parentFragment.java

        public class OneFragment extends Fragment implements TwoFragment.RefreshInterface {
    
        TwoFragment child;
        Button launch;
        FrameLayout containerLayout;
        // child fragment interface object
        TwoFragment.RefreshInterface refreshInterface;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_one, container, false);
            launch = view.findViewById(R.id.fragment_launch);
            containerLayout = view.findViewById(R.id.fragment_container);
            // RefreshInterface. this is mandatory
            refreshInterface = this;
            launch.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    launchChildFragment();
                }
            });
            return view;
        }
    
        @Override
        public void refresh_fragment() {
            // as we added the child fragment to backstack. we will remove the fragment from backstack and add again
            if (getActivity().getSupportFragmentManager().getBackStackEntryCount() > 0){
                getActivity().getSupportFragmentManager().popBackStack();
            }
            launchChildFragment();
        }
    
        private void launchChildFragment(){
            // creating the object for child fragment
            child = new TwoFragment();
            // intialising the RefreshInterface object
            child.intialiseRefreshInterface(refreshInterface);
            // calling the child fragment
            getActivity().getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, child).addToBackStack(null).commit();
        }
    }
    

    <强> fragment_parent.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.myapplication.OneFragment">
    
        <Button
            android:layout_centerHorizontal="true"
            android:id="@+id/fragment_launch"
            android:text="Launch child fragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_below="@id/fragment_launch"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    </RelativeLayout>
    

    <强> childFragment

    public class TwoFragment extends Fragment {
    
        Button refershBtn;
        RefreshInterface refreshInterface;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_two, container, false);
            refershBtn = view.findViewById(R.id.btn_refersh);
    
            refershBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    refreshInterface.refresh_fragment();
                }
            });
            return view;
        }
    
        public void intialiseRefreshInterface(RefreshInterface refreshInterface){
            this.refreshInterface = refreshInterface;
        }
    
        public interface RefreshInterface {
            void refresh_fragment();
        }
    }
    

    <强> fragment_child.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.outthinking.myapplication.TwoFragment">
    
        <!-- TODO: Update blank fragment layout -->
        <EditText
            android:id="@+id/refersh_tv"
            android:textSize="24sp"
            android:textAlignment="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="REFRESH DATA" />
    
        <Button
            android:id="@+id/btn_refersh"
            android:text="refersh"
            android:layout_centerInParent="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </RelativeLayout>