如何重复片段(像循环一样)



我正在开发一个有一些片段的应用程序,我已经使用一个扩展片段寻呼机适配器的适配器对它们进行了设置,我希望这些片段在到达任何一端时重复。例如,如果我设置了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);


    }

}

查看Github上的Infinite Viewpager项目。

使用FragmentPagerAdapter非常简单:

@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)。

我刚刚将我最近的代码推送到GitHub LoopingViewPager,希望这能对你有所帮助。

这个ViewPager可以处理视图和片段,只需要在适配器和xml文件中进行小的代码修改。

相关内容

最新更新