为什么我的viewpager不能在片段中工作?

时间:2012-08-28 20:46:50

标签: android android-fragments android-viewpager actionbarsherlock viewpagerindicator

我的片段有以下代码。我几乎从一个基本的视图分页器示例中获取了这个并将其打成一个片段来测试我正在处理的项目。

我正在使用ACtionBarSherlock和viewPagerIndicator库。下面的片段包含一个viewPager,在这个例子中,它应该在简单的标题字符串之间滑动。

我在一个活动中尝试使用ViewPager和ViewPagerIndicator的例子,没问题。但第二个我把它放入一个片段。 BOOM,只有一个黑屏...没有错误,只是一个黑屏...我觉得我必须膨胀,或错误地访问布局或某事...... 有什么想法吗?

以下是代码:

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-------------------------------------------------
}

2 个答案:

答案 0 :(得分:3)

不要将onCreateView称为错误。

onCreateView是一种重写方法,由FragmentManger调用以处理Fragment生命周期。

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);
}

还要注意,如果你使用的是FragmentPagerAdapter,你需要一个特殊的方法来创建ViewPagerFragment,它有点棘手,但请参考这个gist.

了解Fragment生命周期here

干杯

答案 1 :(得分:0)

使用此功能。

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

为我工作。