关于我想要达到的目标,我还有一些问题需要解决,或者我是否需要朝着不同的方向前进。
这是我要做的事情的模型:
用户应该能够:
-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的唯一选项,如果我想在图像中使用这样的箭头,有没有办法插入那些没有多个标签滚动。
我可以从哪里出发?
答案 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上。单击箭头,只需使用以下代码
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);
}