我正在开发一个有几个片段的应用程序,我已经使用扩展了fragmentpager适配器的适配器设置它们,我希望片段在到达任何一端时重复。例如,如果我已经设置了4个片段,然后当用户到达第4个片段时,视图应该转移到第一个片段,而不是阻止视图... 我已经能够设置片段,但不知道如何实现这个循环...
这是适配器的代码
package sourcecode.jazzplayer;
import java.util.List;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
public class ViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
private static String[] titles = new String[] {"Songs", "My Playlists", "Artists","Albums"};
public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public String getPageTitle( int position )
{
return titles[ position ];
}
}
以下是我如何设置片段的代码
package sourcecode.jazzplayer;
import java.util.List;
import java.util.Vector;
import sourcecode.jazzplayer.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
public class MyMusic extends FragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mymusic);
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, FragmentSongs.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentArtists.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentPlaylists.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentAlbums.class.getName()));
ViewPagerAdapter adapter = new ViewPagerAdapter(super.getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(4);
pager.setCurrentItem(0);
}
}
答案 0 :(得分:1)
检查Github上的Infinite Viewpager项目。
答案 1 :(得分:1)
@Override
public Fragment getItem(int position) {
return this.fragments.get(position % 4);
}
@Override
public long getItemId(int position) {
return position % 4;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
初始化ViewPager时,将初始页面设置为非常高的值,这样您就可以双向移动页面。对于4页,0x40000000大约是Integer.MAX_VALUE
的一半,可以被4整除(id
为0)。
答案 2 :(得分:0)
我刚刚将我最近的代码推送到GitHub LoopingViewPager,我希望这会对你有帮助。
此ViewPager可以处理视图和片段,只需要在适配器和xml文件中进行小的代码修改。