如何重复片段(如循环)?

时间:2013-08-29 17:24:24

标签: android android-layout android-fragments android-viewpager android-fragmentactivity

我正在开发一个有几个片段的应用程序,我已经使用扩展了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);




    }


}

3 个答案:

答案 0 :(得分:1)

检查Github上的Infinite Viewpager项目。

答案 1 :(得分:1)

使用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)。

答案 2 :(得分:0)

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

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