繁体   English   中英

水平ViewPager无法与我的VerticalView分页器同时工作

[英]The Horizontal ViewPager Wont work the same time as my VerticalView Pager

我基本上已经设置好了所有东西,我不知道为什么它不起作用。 我唯一的问题是,当我将其垂直设置时,Vertical将无法工作。 看下面的代码。

我的主要活动

    public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //HorizontalViewPagerAdapter
    View background = findViewById(R.id.am_background_view);
    ViewPager viewPager = findViewById(R.id.am_view_pager);
    HorizontalViewPagerAdapter adapter = new HorizontalViewPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(1);
}

我的控制器片段

public class ControllerFragment extends Fragment {

public static ControllerFragment create() {
    return new ControllerFragment();
}

VerticalViewPager verticalViewPager;
VerticalViewPagerAdapter verticalPageAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.vertical, null);
    verticalViewPager = view.findViewById(R.id.am_scrollView);
    verticalPageAdapter = new VerticalViewPagerAdapter(getChildFragmentManager());
    verticalViewPager.setAdapter(verticalPageAdapter);
    return inflater.inflate(R.layout.vertical, null);
}

public class VerticalViewPagerAdapter extends FragmentPagerAdapter {


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

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return SettingsFragment.create();
            case 1:
                return EmptyFragment.create();
            case 2:
                return ExtrasFragment.create();
        }
        return null;
    }


    @Override
    public int getCount() {
        return 3;
    }

}

}

这是我的Horizo​​ntalAdapter

public class HorizontalViewPagerAdapter extends FragmentPagerAdapter {

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

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return ChatFragment.create();
        case 1:
            return ControllerFragment.create();
        case 2:
            return StoryFragment.create();
    }
    return null;
}


@Override
public int getCount() {
    return 3;
}

就像整个代码完全忽略了VerticalView Pager,因为它在我的应用程序中根本不显示,并且与普通ViewPager完全相同

了解了您想要实现的目标之后,您将达到目标!

共有6个片段。 说明图

  1. 剩下
  2. 最佳
  3. 博顿
  4. 控制者

更新资料

先前的方法会覆盖并阻止捕获水平手势。 我搜索了一下,找到了替代方法。

首先,您需要一个不同的垂直寻呼机库。 我在这里尝试了一个,效果很好。

所以,您要做的是,在项目中获取该Java文件,并像这样更改控制器的XML

<?xml version="1.0" encoding="utf-8"?>
<c.kristofer.jax2.VerticalPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/am_scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        android:id="@+id/top"
        class="c.kristofer.jax2.Fragments.SettingsFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <fragment
        android:id="@+id/home"
        class="c.kristofer.jax2.Fragments.HomeFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <fragment
        android:id="@+id/bottom"
        class="c.kristofer.jax2.Fragments.SettingsFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</c.kristofer.jax2.VerticalPager>

ViewPager不采用适配器,而是对其子视图采用<fragment>标记。 控制器的Java代码也会有所变化

VerticalPager verticalViewPager = view.findViewById(R.id.am_scrollView);
verticalViewPager.snapToPage(1);

结果可以在这里看到。 您可以试一下代码,看看最适合您的代码。

以前的方法

活动将具有ViewPager之一,即“水平”或“垂直”之一。 ViewPager的中间片段将是Controller。 控制器将负责第二个ViewPager ViewPager的中间片段将为Home。

这样,您将拥有2个与Activity的自由度和2个与Controller的自由度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM