使用FragmentStatePagerAdapter JazzyViewPager转换不起作用

时间:2014-05-17 11:14:05

标签: fragmentstatepageradapter jazzylistview

问题是过渡不会起作用,但整个应用程序都运行良好。这只是过渡效果无效。我已经尝试了所有这些,但没有运气。代码中也没有错误我不知道我做错了所以请帮助。这也是我的第一个应用程序,所以请善待。 :) 我没有在pageradapter上包含instantiateitem,因为如果我这样做会有一个nullpointerexception。 :/

activity_main xml

<com.jfeinstein.jazzyviewpager.JazzyViewPager xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app1="http://schemas.android.com/apk/res/com.eight.yamjay" android:id="@+id/jazzy_pager" app1:style="cubeout" android:layout_width="match_parent" android:layout_height="match_parent" />

主要活动:

公共类MainActivity扩展了FragmentActivity {

//private static FragmentAdapter mAdapter;
private JazzyViewPager mJazzy;


  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setupJazziness(TransitionEffect.CubeIn);

}

  @Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add("Toggle Fade");
    String[] effects = this.getResources().getStringArray(R.array.jazzy_effects);
    for (String effect : effects)
        menu.add(effect);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getTitle().toString().equals("Toggle Fade")) {
        mJazzy.setFadeEnabled(!mJazzy.getFadeEnabled());
    } else {
        TransitionEffect effect = TransitionEffect.valueOf(item.getTitle().toString());
        setupJazziness(effect);
    }
    return true;
}

  private void setupJazziness(TransitionEffect effect) {
      mJazzy = (JazzyViewPager) findViewById(R.id.jazzy_pager);
      mJazzy.setTransitionEffect(effect);
      mJazzy.setAdapter(new FragmentAdapter(getSupportFragmentManager()));
      mJazzy.setPageMargin(30);
  }   

}

FragmentStatePagerAdapter:

公共类FragmentAdapter扩展了FragmentStatePagerAdapter {

public FragmentAdapter(FragmentManager fm) {
    super(fm);
    // TODO Auto-generated constructor stub
}   

@Override
public Fragment getItem(int position) 
{
    // TODO Auto-generated method stub
    Fragment fragment = new Fragment1();
    switch(position){
    case 0:
        fragment = new Fragment1();
        break;
    case 1:
        fragment = new Fragment2();
        break;
    case 2:
        fragment = new Fragment3();
        break;
    }
    return fragment;
}


@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 3;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    if(object != null){
        return ((Fragment)object).getView() == view;
    }else{
        return false;
    }
}

}

片段1:

公共类Fragment1扩展了Fragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.fragment1_layout, null);
    return v;


}

}

2 个答案:

答案 0 :(得分:1)

您必须使用 instantiateItem 导致its author said that。你可以使用这个代码示例,你可以去。

   @Override
public Object instantiateItem(ViewGroup container, final int position) {
    Object obj = super.instantiateItem(container, position);
    mJazzy.setObjectForPosition(obj, position);
    return obj;
}

请检查链接。

答案 1 :(得分:0)

您只需调用 MainAdapter 类并覆盖其方法,而不是调用 ScreenSlidePagerAdapter 类。它不是一个巨大的变化。如果你仍然想要我可以给你整个代码以及如何调用MainAdapter类。我也使用ScreenSlidePagerAdapter但后来我改为JazzyViewPager,现在我使用MainAdapter类填充视图寻呼机。您也可以根据滑块的位置传递根视图,而不是像示例中所示传递对象。