1

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




    }


}
4

3 回答 3

1

检查 Github 上的Infinite Viewpager项目。

于 2013-08-29T17:36:10.870 回答
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 大约是 4 的一半Integer.MAX_VALUE并且可以被 4 整除(id为 0)。

于 2013-11-01T17:22:31.167 回答
0

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

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

于 2013-09-15T18:47:53.817 回答