Horizo​​ntal ViewPager不会与我的VerticalView寻呼机同时工作

时间:2018-01-05 16:22:46

标签: android android-fragments android-scrollview

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

我的主要活力

    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寻呼机,因为它在我的应用程序中根本没有显示,而且它与普通的ViewPager完全相同

1 个答案:

答案 0 :(得分:0)

了解了你想要达到的目标,以及你如何实现它!

总共有6个片段。 explanation image

  1. 主页
  2. 右键
  3. 波顿
  4. 控制器
  5. 更新

    之前的方法会覆盖并阻止捕获水平手势。我搜索了一下,找到了另一种选择。

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

    所以你想做的是,在你的项目中获取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>个标记用于其子视图。 Controller的java代码也会改变一点

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

    结果可见here。您可以使用代码并查看最适合您的代码。

    以前的方法

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

    通过这种方式,您将获得活动的2个自由度,以及从控制器获得2个自由度。