Ole*_*sov 8 java android android-fragments android-fragmentactivity
我正在开发一个应用程序,目前我正在尝试添加ScreenSlide它.我设法使用一个教程来做到这一点,但通常在x页面之间滑动并不是我想要的.
使用下面提供的代码,我可以在5页之间滑动,但页面以直线排列,您不能从第一页直接到第5页,反之亦然.在我的应用程序中,我有4页.当我向左滑动时,我在前2页之间切换,当我向右滑动时,我在最后2页之间切换.在下图中,您可以看到我当前的代码如何切换页面及其下 - 我的目标.
public class MainActivity extends FragmentActivity {
private static final int NUM_PAGES = 5;
private ViewPager mPager;
private ScreenSlidePageFragment[] pages = new ScreenSlidePageFragment[NUM_PAGES];
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_slide);
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
super.onBackPressed();
} else {
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_PAGES;
}
@Override
public Fragment getItem(int position) {
boolean moveRight = mPager.getCurrentItem() < position;
boolean moveLeft = mPager.getCurrentItem() > position;
switch(position){
case 5:
if(moveRight){
return geLog.w("i"
+ "Info", Integer.toString(position));
//return getPageByPosition(2);
if(moveLeft)
return getPageByPosition(2);
}
return new ScreenSlidePageFragment();
}
private Fragment getPageByPosition(int position){
int index = position - 1;
if(index < 0 || index > NUM_PAGES-1)
throw new InvalidParameterException("requested position is invalid");
if(pages[index] == null)
pages[index] = new ScreenSlidePageFragment();
return pages[index];
}
}
}
Run Code Online (Sandbox Code Playgroud)
[UPDATE]
我设法编写了一个代码,允许我在6个不同的页面之间无限滑动.左侧是有限的 - 我只能滑到第一页(所以如果我在右侧循环3次之后我在第一页,我只能向后循环3次).我想我非常接近找到解决方案.有任何想法吗?
MainActivity.java
public class MainActivity extends FragmentActivity {
private static final int NUM_PAGES = 6;
private ViewPager pager;
private PagerAdapter pagerAdapter;
private List<ScreenSlidePageFragment> slideList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
slideList = new ArrayList<ScreenSlidePageFragment>();
for (int i = 0; i<NUM_PAGES; i++){
ScreenSlidePageFragment slide = new ScreenSlidePageFragment();
slide.setIndex(i+1);
slideList.add(slide);
}
pager = (ViewPager) findViewById(R.id.pager);
pagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
pager.setAdapter(pagerAdapter);
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
int _pos = position % NUM_PAGES;
return slideList.get(_pos);
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
}
}
Run Code Online (Sandbox Code Playgroud)
ScreenSlidePageFragment.java
public class ScreenSlidePageFragment extends Fragment {
private int index;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup)inflater.inflate(R.layout.slide, container, false);
TextView tw = (TextView) root.findViewById(R.id.textView);
tw.setText(Integer.toString(index));
return root;
}
public void setIndex(int index){
this.index = index;
}
}
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方法是不使用 viewpager,而是创建自己的自定义滑块,我最终得到了这个解决方案,因为 ViewPager 非常不灵活,例如,如果您尝试做类似 Facebook Page 应用程序之类的事情。缺点:您必须管理所有接触和生命周期。
另一个更简单的解决方案基本上是使用以下 API,如果我正确理解了问题,那么它应该足够了。
ViewPager.setCurrentItem
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |