【问题标题】:Viewpager in AndroidAndroid中的Viewpager
【发布时间】:2013-04-08 22:51:01
【问题描述】:

我如何在both direction 中创建ViewPager。可能吗 ?如果可能的话,我该如何实现它。

我使用以下代码在单向创建了viewpager

private void initialisePaging() {

        List<Fragment> fragments = new Vector<Fragment>();
        fragments.add(Fragment.instantiate(this, Fragment0.class.getName()));
        fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
        fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
        this.mPagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);

        ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);
        pager.setAdapter(this.mPagerAdapter);
    }

谁能帮帮我..谢谢!!

【问题讨论】:

  • 你可以使用这个库并设置寻呼机方向水平和垂直here
  • @sheetal 感谢您的回答,让我检查一下!!
  • @AbhishekSabbarwal 感谢您的回答让我检查链接
  • sheetal 我在那里没有任何图书馆!!
  • @AbhishekSabbarwal 我想让 viewpager 双向而不是单向!!

标签: android android-viewpager


【解决方案1】:

好吧,据我了解,您有一个 Fragments 列表,您希望用户在其中启动 Pages/Fragments,我已经使用并测试了以下代码,它是为我正常工作。

如果您知道Fragments 的数量并且没有动态更改Fragments,那么这可以更简单地处理,但我将关闭您在OP 中提供的代码。试试看:

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // This is going to initialize our Fragment list
        mSectionsPagerAdapter.init();

        // Now we are going to determine the starting position
        int startPos = mSectionsPagerAdapter.getStartPosition();

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        // AFTER we set the adapter we will define our start position
        mViewPager.setCurrentItem(startPos);
    }
}

现在让我们看看我们的FragmentPagerAdapter

我在这个类中添加了几个方法,init() 方法、setCount()getStartPosition()

public class SectionsPagerAdapter extends FragmentPagerAdapter {
    private int _count = 2;
    private int _start = 0;

    List<Fragment> fragments;

    public SectionsPagerAdapter(FragmentManager fm) { 
        super(fm);
    }

    public void init() {
        fragments = new ArrayList<Fragment>();
        fragments.add(new MyFragmentOne());
        fragments.add(new MyFragmentTwo());
        fragments.add(new MyFragmentThree());
        fragments.add(new MyFragmentFour());
        fragments.add(new MyFragmentFive());
        setCount();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }

    @Override
    public Fragment getItem(int position) {
        return (fragments.size() >= position) ? fragments.get(position) : null;
    }

    // We have created this method to get the starting position
    // You might want to play around with this to make sure the returned
    // position fits what you want for odd numbered Fragment Pages
    public int getStartPosition() {
        _start = fragments.size() / 2;
        return Math.round(_start);
    }

    public void setCount() { this._count = fragments.size(); }

    @Override
    public int getCount() { return this._count; }

    // You will need to change this to get the appropriate title per page    
    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            return getString(R.string.company_select).toUpperCase(Locale.ENGLISH);
        case 1:
            return getString(R.string.companies_pending).toUpperCase(Locale.ENGLISH);
        }
        return null;
    }
}

请注意:您没有提供您尝试过的示例,因此我为您编写了代码。 StackOverflow 不适合这种情况,将来当出现问题时,请向我们提供您尝试过的方法,我们将尝试帮助确定问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 2018-05-14
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多