在ViewPager中devise一个Horizo​​ntalScrollView或者使用fragment:

我需要devise下面的屏幕,我需要你的build议:

在这里输入图像说明

说明:

标题是静态的/固定的,我不需要做任何事情。

黄色:这是一个有趣的部分,我需要devise一个ViewPager类似的屏幕,可以向左/向右滚动最大4个屏幕。

红色:在每个屏幕上,我需要添加一个表格/网格,如果不适合屏幕尺寸,也可以滚动。

绿色:可以使用屏幕底部的绿色button或通过滚动ViewPager来完成页面切换。

问题是:这种行为可以使用ViewPager实现,还是应该使用Fragments ? 如果片段是要走的路,那么我将如何使用滑动手势来实现页面切换? 如果它是一个ViewPager然后如何添加内部滚动,以及如何使用底部的button来控制它?

任何帮助将不胜感激,谢谢。

Solutions Collecting From Web of "在ViewPager中devise一个Horizo​​ntalScrollView或者使用fragment:"

我认为这应该与一个不可滑动的 ViewPager解决。 视图寻呼机底层Fragment不应该对滑动手势做出响应。 重写在ViewPager中禁用滑动的ViewPager是:

  1. onTouchEvent() – 返回false
  2. onInterceptTouchEvent() – 返回false

有关如何实现此目的的更多信息,请参阅此SO问题 。

接下来,您希望在每个寻呼机持有者中使用Fragment 。 所以我们构build了以下布局:

在父活动中, FragmentPagerAdapter被实例化,并且标签添加了一个标签:

活动更改

 @Override protected void onCreate(final Bundle saveInstanceState) { final FragmentPagerAdapter myTabAdapter = new MyFragmentPagerAdapter( <Your ViewPager View>, <Your activity context, this>); myTabAdapter.addTab(getActionBar().newTab(), "YOUR TAG", "Your Title"); // etc... } 

所以这给了我们上图的框架。 托pipe活动,包含ViewPager和底层的选项卡。 接下来是将Fragment (包含您的表格)放入每个相应的选项卡中。 这由FragmentPagerAdapter实现来处理:

片段适配器(内部类到活动):

 private class MyFragmentPagerAdapter extends FragmentPagerAdapter implements ActionBar.TabListener, ViewPager.OnPageChangeListener { /** * Constructs a pager adapter to back a {@link ViewPager}. * * @param pager * The {@link ViewPager} widget. * @param activityContext * The context the widget is being added under. */ public SpotMenuFragmentPagerAdapter(final ViewPager pager, final Context activityContext) { super(getFragmentManager()); pager.setAdapter(this); this.context = activityContext; } /** * Adds a tab to the hosting activity action bar. * * @param newTab * The tab to add. * @param tag * The tab tag for id purposes. * @param label * The label of the tab displayed to the user. */ public void addTab(final ActionBar.Tab newTab, final String tag, final String label) { newTab.setTag(tag); newTab.setText(label); newTab.setTabListener(this); getSupportActionBar().addTab(newTab); } /** * This is where you do the work of building the correct fragment based * on the tab currently selected. * * @see FragmentPagerAdapter#getItem(int) */ @Override public Fragment getItem(final int position) { final Tab tab = getActionBar().getTabAt(position); if ("MY TAG".equals(tab.getTag().toString()) { // instantiate the fragment (table) for "MY TAG" } else { // instantiate something else... } } /** * One fragment per tab. * * @see android.support.v4.view.PagerAdapter#getCount() */ @Override public int getCount() { return getSupportActionBar().getTabCount(); } /** * @see ViewPager.OnPageChangeListener#onPageScrollStateChanged(int) */ @Override public void onPageScrollStateChanged(final int arg0) { // No-op. } /** * @see ViewPager.OnPageChangeListener#onPageScrolled(int, float, int) */ @Override public void onPageScrolled(final int arg0, final float arg1, final int arg2) { // No-op. } /** * @see ViewPager.OnPageChangeListener#onPageSelected(int) */ @Override public void onPageSelected(final int position) { getSupportActionBar().setSelectedNavigationItem(position); } /** * @see TabListener#onTabSelected(app.ActionBar.Tab, * app.FragmentTransaction) */ @Override public void onTabSelected(final Tab tab, final FragmentTransaction ft) { viewPager.setCurrentItem(tab.getPosition()); } /** * @see TabListener#onTabUnselected(ActionBar.Tab, * app.FragmentTransaction) */ @Override public void onTabUnselected(final Tab tab, final FragmentTransaction ft) { // No-op. } /** * @see TabListener#onTabReselected(ActionBar.Tab,app.FragmentTransaction) */ @Override public void onTabReselected(final Tab tab, final FragmentTransaction ft) { // No-op. } } 

因此,希望通过这一点,我们有一个活动托pipe一个“不可滑动的”视图寻呼机和切换选项卡在标题下(或取决于屏幕大小旁边的标签栏的forms)的机制。 从这一点上我相信你可以定制用一些导航箭头replace标签栏。

注:很多是从记忆中写出来的,但希望我已经传达了我要去的地方的要点。

更新

为了响应更新的问题:您可以将选项卡设置为任何旧视图。 相应地设置TabSpec 。 道歉我没有用过这个我自己。

你必须使用Horizo​​ntalScrollView它将包含一个LinearLayout和线性是将包含您的个别元素

XML会看到这样的东西

  <HorizontalScrollView android:id="@+id/horizontal_scroll_parent" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="horizontal" android:scrollbarStyle="outsideInset"> <LinearLayout android:id="@+id/content_scroll" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center_vertical" /> </HorizontalScrollView>