Ethan
Ethan

Reputation: 1266

Why doesn't my viewpager work in a Fragment?

I have the following code for my fragment. I pretty much took this from a basic view pager example and slapped it into a fragment to test for a project I'm working on.

I'm using ACtionBarSherlock, and viewPagerIndicator libraries. The Fragment below contains a viewPager that in this example is supposed to swipe between simple title strings.

I tried the example with the ViewPager and ViewPagerIndicator in an activity, and no problem. But the second I put it into a fragment. BOOM, nothing but a black screen... NO errors, just a black screen...I feel like I must be inflating, or accessing the layout incorrectly or something... Any ideas?

Here's the code:

public class TestFragment extends SherlockFragment {

    //~Constants----------------------------------------------


    //~Data Fields--------------------------------------------

    //~Constructors--------------------------------------------
    @Override
    public void onCreate(Bundle savedInstanceState) {

        //Setup view
        super.onCreate(savedInstanceState);
        View view = onCreateView(getLayoutInflater(savedInstanceState), null, savedInstanceState);

        ViewPagerAdapter adapter = new ViewPagerAdapter( this.getSherlockActivity() );
        ViewPager pager = 
            (ViewPager)view.findViewById(R.id.free_time_day_pager);
        TitlePageIndicator indicator = 
            (TitlePageIndicator)view.findViewById(R.id.titles);
        pager.setAdapter( adapter );
        indicator.setViewPager( pager );
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.free_time_fragment_layout, null, false);
        return view;
    }

    //~Methods-------------------------------------------------
}

Upvotes: 3

Views: 2395

Answers (2)

Paulo Cella
Paulo Cella

Reputation: 1

Use this.

compile 'com.android.support:appcompat-v7:23.0.1'

work for me.

Upvotes: 0

Chris.Jenkins
Chris.Jenkins

Reputation: 13129

Dont call onCreateView that is wrong.

onCreateView is an overridden method which is called by the FragmentManger to handle the Fragment lifecycle.

private ViewPager mViewPager;
private TitlePagerIndicator mIndicator;

// Called first
@Override
public void onCreate(Bundle savedInstanceState) {
    //Setup view
    super.onCreate(savedInstanceState);
}

// Called second
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.free_time_fragment_layout, null, false);
    return view;
}

// Called third
@Override
public View onViewCreated(View v){
    super.onViewCreated(v);
    mViewPager = (ViewPager) v.findViewById(R.id.free_time_day_pager);
    mIndicator = (TitlePageIndicator)v.findViewById(R.id.titles);

}


public void onActivityCreated(Bundle bdl){
    super.onActivityCreated(bdl);
    ViewPagerAdapter adapter = new ViewPagerAdapter( getSherlockActivity() );
    mViewPager.setAdapter(adapter);
    mIndicator.setViewPager(pager);
}

Also be aware if you are using a FragmentPagerAdapter you require a special method to create the ViewPagerFragment, its a bit tricky but refer to this gist.

Read about Fragment Lifecycles here too.

Cheers

Upvotes: 3

Related Questions