我基本上已经完成了所有设置,但我不知道为什么它不起作用。我唯一的问题是,当我将它一起设置时,垂直将无法工作。看下面的代码。
我的主要活力
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;
}
}
}
这是我的HorizontalAdapter
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完全相同
答案 0 :(得分:0)
了解了你想要达到的目标,以及你如何实现它!
之前的方法会覆盖并阻止捕获水平手势。我搜索了一下,找到了另一种选择。
首先,您需要一个不同的垂直寻呼机库。我尝试了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个自由度。