如何使用Android中的新片段完全替换View Pager视图

use*_*008 5 android android-fragments android-viewpager

我有以下xml文件:

  <android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

我在视图分页器中有三个片段.在其中一个片段中,我正在尝试使用此代码启动一个新片段:

FragmentTransaction trans = getFragmentManager()
                .beginTransaction();
        trans.replace(R.id.pager, new SubscriptionFragment());
        trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        trans.addToBackStack(null);

        trans.commit();
Run Code Online (Sandbox Code Playgroud)

我能够成功替换ViewPager的现有片段,但它不能满足我的目的,我想做的是不替换viewPager中已存在的现有片段,而是从视图中删除视图寻呼机本身查看并启动一个新的片段,以便顶部选项卡不再可见,ViewPager将进入视图.这在我使用intent启动新活动时有效.但不适用于片段.

编辑:

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new MainFragment()).commit();
    }


}
Run Code Online (Sandbox Code Playgroud)

MainFragment:

public class MainFragment extends Fragment {

    FragmentPagerAdapter adapterViewPager;
    ViewPager viewPager;
    String title[] = {"Services", "You", "History"};

    // TODO: Rename and change types and number of parameters
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        /* Inflate the layout for this fragment */
        View view = inflater.inflate(R.layout.fragment_view_pager, container, false);




        /*************************************/
        //CALLING HISTORY API

        //  loadSubscriptions();

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ViewPagerAdapter mAdapter = new ViewPagerAdapter(getFragmentManager());

        ViewPager mPager = (ViewPager) getView().findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);
    }

    public static class ViewPagerAdapter extends FragmentPagerAdapter {
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int num) {
            if (num == 0) {
                return new ServicesFragment();
            } else {
                return new HistoryFragment();
            }
        }

        @Override
        public int getCount() {
            return 2;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

activity_main.xml中

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

fragment_view_pager.xml

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

在servicefragment中:我使用以下方法打开新片段:

physiotherapyView.setOnClickListener(new View.OnClickListener() {





 @Override

        public void onClick(View view) {

            FragmentTransaction trans = getFragmentManager()
                    .beginTransaction();
            /*
             * IMPORTANT: We use the "root frame" defined in
             * "root_fragment.xml" as the reference to replace fragment
             */
            trans.replace(R.id.pager, new SubscriptionFragment());

            /*
             * IMPORTANT: The following lines allow us to add the fragment
             * to the stack and return to it later, by pressing back
             */
            trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            trans.addToBackStack(null);

            trans.commit();

        }

    });
Run Code Online (Sandbox Code Playgroud)

Abh*_*hek 0

不要在FrameLayout内添加ViewPager。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

在此布局中添加 Fragment,其中包含 ViewPager 并在 mainActivity 中添加 FragmentTransaction

    public class MainActivity extends FragmentActivity {


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, new MainFragment()).commit();
Run Code Online (Sandbox Code Playgroud)

这里,MainFragment包含ViewPager,现在你可以用FragmentTransaction替换整个布局中的viewPager