简体   繁体   中英

Display ViewPager in fragment of my mainActivity

I am a new member here. I have already done several searches for two days on my problem but I have not found anything. So I invite you to ask for help.

I have a navigation drawer This is a category I would like to put a fragment that when I slip left or right, my calendar appears with a different date. So I developed a ViewPager in a fragment. This fragment is a fragment for my navigation drawer. My problem: The ViewPage does not appear.

Either it is the page viewer that is displayed either it is a blank fragment. It is the line of code who change the display :

mContext.setContentView(ViewPager);

screen without this code screen with this code The number "89" is a random number who is incremented by 1 on swipe.

The differents part code : in the main acitivity to show fragment:

TestSlideFragment fragment = new TestSlideFragment();
fragmentTransaction.replace(R.id.RelativeLayout_for_Fragment, fragment, fragment.getTag());
fragmentTransaction.commit();

testSlideFragment (java and xml)

public class TestSlideFragment extends Fragment {
    View view = null;
    private static final int NUM_PAGES = 5;
    int nbr = 0 ;

    /**
     * The pager widget, which handles animation and allows swiping horizontally to access previous
     * and next wizard steps.
     */
    private ViewPager mPager;

    ViewPager ViewPager;
    FragmentStatePagerAdapter mAdapt;
    //private TabsAdapter d;

    /**
     * The pager adapter, which provides the pages to the view pager widget.
     */
    private PagerAdapter mPagerAdapter;


    public TestSlideFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment



         view = inflater.inflate(R.layout.fragment_test_slide, container, false);
        return  view;
    }

    /**
     * The number of pages (wizard steps) to show in this demo.
     */

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Activity mActivity =  getActivity();
        FragmentActivity mContext;
        mContext=(FragmentActivity) mActivity;

        ViewPager = new ViewPager(mContext);
        ViewPager.setId(R.id.slide);
        mContext.setContentView(ViewPager);

        mPagerAdapter = new ScreenSlidePagerAdapter(mContext.getSupportFragmentManager());
        ViewPager.setAdapter(mPagerAdapter);
        ViewPager.setCurrentItem(1);

    }



    /**
     * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
     * sequence.
     */
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return new ScreenSlidePageFragment();
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }
    }


}

XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:tag="fragment_test_slide"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="oytoch.iut_info.test.TestSlideFragment">

    <!-- TODO: Update blank fragment layout -->
    <android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/page"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

ScreenSlidePageFragment

public class ScreenSlidePageFragment extends Fragment {
ViewGroup rootView = null;
SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs" ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
         rootView = (ViewGroup) inflater.inflate(
            R.layout.fragment_screen_slide_page,container,false);


    return rootView;
}
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Activity mActivity = getActivity();
    Context mContext = getActivity();

    TextView slide_txt = (TextView) rootView.findViewById(R.id.slide);

    SharedPreferences prefs = mContext.getSharedPreferences(MyPREFERENCES , MODE_PRIVATE);
    int restoredText = prefs.getInt("nbr", 0);

    slide_txt.setText(Integer.toString(restoredText));

    sharedpreferences = mContext.getSharedPreferences(MyPREFERENCES, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedpreferences.edit();
    editor.putInt("nbr", 1+ restoredText);
    editor.commit();
}

}

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">


    <ScrollView
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView`enter code here`
            android:padding="16dp"
            android:id="@+id/slide"
            android:lineSpacingMultiplier="1.2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="lorem_ipsum" />
    </ScrollView>
</FrameLayout>

How do I display this page viewer in my main activity? Thanks for reading me

Inside your TestSlideFragment replace below code which you have written inside onActivityCreated

ViewPager = new ViewPager(mContext);
    ViewPager.setId(R.id.slide);
    mContext.setContentView(ViewPager);

with

ViewPager = (ViewPager)getView().findViewById(R.id.page);

And try to run your application again.

Why are you adding the viewpager in the setcontentview method? That sets the viewpager for the whole activity.

Find your viewpager within the fragment like

vp = (ViewPager) view.findViewById(R.id.viewpager).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM