使用ViewPager保留一个包含多个视图的片段

时间:2014-10-03 15:45:31

标签: java android android-fragments android-viewpager

关于我想要达到的目标,我还有一些问题需要解决,或者我是否需要朝着不同的方向前进。

这是我要做的事情的模型:

enter image description here

用户应该能够:

-swipe left or right

- 点击顶部的箭头向左或向右

视图集合不固定(它是动态的,它是从数据库中提取的数字)

现在,我已经阅读了ViewPager,我认为这是我可以用来实现我想做的最接近的事情。

这是我的代码:

//ScorePager.java

public class ScorePager extends FragmentActivity {

    private PagerAdapter pagerAdapter;
    ActionBar actionbar;
    ViewPager viewPager = null;

    public static final String TAG ="ScorePager";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        super.setContentView(R.layout.viewpager_view);

        viewPager = (ViewPager) findViewById(R.id.viewPager);
        FragmentManager fragmentManager = getSupportFragmentManager();
        viewPager.setAdapter(new myAdapter(fragmentManager));

    }

    private class myAdapter extends FragmentStatePagerAdapter {

        public myAdapter(FragmentManager fragmentManager) {

            super(fragmentManager);
        }

            @Override
            public Fragment getItem(int i){
                Fragment fragment = null;
            Log.d(TAG, "get Item is called " + i);
                if (i == 0) {
                    fragment = new ScoreFragment();
                }
               if (i == 1) {
                    fragment = new ScoreFragmentB();
                }

                return fragment;
            }

            @Override
            public int getCount () {
            Log.d(TAG, "get Count is called");
                return 2;
            }
        }
    }

问题是,我会在某些时候存储太多片段。例如。如果我需要显示20个新视图,我必须按照上面编码的方式拥有20个片段。

现在,我有两个碎片和两个硬编码的视图。有没有办法制作动态片段布局?我从未使用动态视图,所以我想知道这个过程更清洁,代码更少。

我是否可以拥有一个片段和一个布局视图。如果是这样,如何仅使用一个片段和一个视图更改视图状态?

此外,看起来像标签栏是ViewPager的唯一选项,如果我想在图像中使用这样的箭头,有没有办法插入那些没有多个标签滚动。

我可以从哪里出发?

2 个答案:

答案 0 :(得分:4)

Is there a way to make a dynamic fragment layout?

我不明白你为什么需要动态片段布局,因为根据上面的小图,所有视图看起来几乎相似,除了箭头(其可见性总是可以根据位置改变)。

Is it possible for me to have one fragment and one layout view.

由于您所有片段的布局相似,因此您应该尝试使用PagerAdapter而不是FragmentPagerAdapter。 FragmentPagerAdapter是PagerAdapter的子类。给出了一个非常简单的例子here

If so, how do I change the view state with just one fragment and one view?

您可以根据instantiateItem()中的位置更改视图状态。

Also, it seems like a tabbed title bar is the only option with ViewPager, if I want to use arrows like such in the image, is there a way to insert those without having multiple tabs to scroll across.

你错了。如教程here所示,他们没有使用选项卡式标题栏。对于您的情况,我建议您在活动中使用2个箭头进行导航,并根据您获得onPageSelected()的位置通过设置{{3}来更改其开启/关闭的可见性在viewpager上。单击箭头,只需使用以下代码

更新viewpager的位置
public void moveToNextPage(View view) {
    //it doesn't matter if you're already in the last item
    viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
}

public void moveToPreviousPage(View view) {
    //it doesn't matter if you're already in the first item
    viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}

答案 1 :(得分:0)

如果您不想在ViewPager中使用片段,可以使用常规视图。

请使用以下方法,而不是覆盖getItem

@Override
public Object instantiateItem(ViewGroup collection, int position) {
    View v = layoutInflater.inflate(...);
    ...
    ((ViewPager) collection).addView(v,0);
    return v;
}

@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
    ((ViewPager) collection).removeView((TextView) view);
}