私は2つの間に標準的なセットアップがありますが、TabLayoutのタップ(TabLayoutのドットに直接触れたとき)がViewPagerのスワイプと異なるようにします。たぶん、タップアクションで「タップ」を印刷し、スワイプアクションで「スワイプ」を印刷したいと思うかもしれません。現時点では、TabLayoutでViewPagerにアタッチする以外は何も設定していませんが、ViewPagerをスワイプすると「スワイプ」と「タップ」の両方が印刷されます。TabLayoutとViewPagerのアクションをどのように分けることができますか?
0
A
答えて
1
だから私はいくつかの手抜きをしたが、最終的に私が望むものを得た。 TabLayoutのリスナーは、ViewPagerが扱う内容に気をつけますが、逆のことはしません。したがって、VPをスワイプすると、両方のリスナーがそれを聞きます。 TabLayoutをタップすると、TabLayoutだけが認識されます。したがって、私はタップ機能をタップするように設定できますし、スワイプ機能では、実際にVPを動かしたスワイプかタップかどうかを確認するだけです。
MVVM ViewModelにバインド:
@BindingAdapter({"onAdapterChangeListener"})
public static void setOnAdapterChangeListener(ViewPager viewPager, BehaviorSubject<Void> adapterChangeSubject) {
viewPager.addOnAdapterChangeListener((viewPager1, oldAdapter, newAdapter) -> adapterChangeSubject.onNext(null));
}
@BindingAdapter({"viewPager","onTap","onSwipe"})
public static void addOnTabSelectedListener(TabLayout tabLayout, ViewPager viewPager, BehaviorSubject<Integer> tapSubject, BehaviorSubject<Integer> swipeSubject) {
viewPager.addOnAdapterChangeListener((viewPager1, oldAdapter, newAdapter) -> {
tabLayout.setupWithViewPager(viewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
int tabPosition = tab.getPosition();
if (tabPosition == viewPager.getCurrentItem()) {
swipeSubject.onNext(tabPosition);
// A swipe will have the VP tell the TabLayout what tab to move to before
// this is called, so if the two positions match, it means the user
// performed a swipe action
} else {
tapSubject.onNext(tabPosition);
viewPager.setCurrentItem(tabPosition);
// Otherwise, it was definitely a tap action
}
}
// If I updated from API 23 to 24 I would use tabLayout.addOnTab and wouldn't
// need these guys below
@Override
public void onTabUnselected(TabLayout.Tab tab) {}
@Override
public void onTabReselected(TabLayout.Tab tab) {}
});
});
}
XML:
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="-17dp"
android:layout_gravity="top"
app:tabBackground="@drawable/dot_tab_selector"
app:tabGravity="center"
app:tabIndicatorHeight="0dp"
app:tabPaddingEnd="5dp"
app:tabPaddingStart="5dp"
app:viewPager="@{{viewPager}}"
app:onTap="@{carouselViewModel.tapSubject}"
app:onSwipe="@{carouselViewModel.swipeSubject}"/>
<com.snip.CustomViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingEnd="20dp"
android:paddingStart="20dp"
app:onAdapterChangeListener="@{carouselViewModel.carouselAdapterChangeSubject}"/>
CarouselViewModel:それはタブのタップを期待して
swipeSubject
.subscribe(page -> {
doTheSwipeThing();
});
tapSubject
.subscribe(page -> {
doTheTapThing();
});
関連する問題
- 1. このコアデータをどのように分けることができますか?
- 2. コンポーネントとサービスをどのように分けることができますか?
- 3. テキストをリストとどのように分けることができますか?
- 4. ViewPagerとTabLayout
- 5. 各部門をどのように分けることができますか?
- 6. ViewPagerとTablayoutでSwipeRefreshLayoutを使用する
- 7. JNIの部分をAndroidアプリからどのように分けることができますか?
- 8. どのように最初にアクションを待つループを、アンドロイドで続けることができますか?
- 9. jqGridはstruts2アクションからのエラーメッセージをどのように受け取ることができますか?
- 10. ドッカーのコンテナでバックエンドとフロントエンドのワードプレスをどのように分けることができますか?
- 11. このipv6アドレスの使用をcのsscanfにどのように分けることができますか?
- 12. TabLayoutのAndroidフラグメントが独自のインデックスをどのように読み取ることができますか?
- 13. オブジェクトがアクションを実行したことをどのように知ることができますか?
- 14. UiButtonアクションでどのようなパラメータを渡すことができますか?
- 15. EclipseでJava7とJava6をどのように使い分けることができますか?
- 16. どのようにしてR行ごとに共分散を見つけることができますか
- 17. フラグメントのViewPagerとTabLayout。ヌルオブジェクトリファレンスでsetAdapter
- 18. Tablayout&viewpagerスケーリングと翻訳
- 19. このリストからどのように分けることができますか?
- 20. TabLayoutはViewPagerフラグメントと重複します
- 21. Delphiアプリケーションのタスクバーのキャプションをメインフォームのキャプションからどのように分けることができますか?
- 22. 私はどのようにしてTabLayoutの断片を完成させることができますか?
- 23. テーブルヘッダーセルをどのように分割することができますか?
- 24. どのようにデータを分割することができますか?シンボル?
- 25. Pythonで列の値を特定の行でどのように分けることができますか?
- 26. どのようにすべての値をinitializer_listから分けることができますか?
- 27. レイアウトアーキテクチャ:ヘッダーとViewPagerのtablayoutを使用
- 28. 私はどのようにtimeformatの特定の部分だけをスタイルすることができますか?
- 29. ビジュアルステート管理とカスタムコントロールテンプレートはどのように分けることができますか?
- 30. bigramペアの頻度をunigram wordでどのように分けることができますか?
あなたは、 'setupWithViewPagerを()'を使用することはできません。同じことをするためにページをスワイプします。 'TabLayout'のカスタムリスナーを介して、手動でそれをすべて管理する必要があります。 IMHOは、ユーザビリティの観点から、あなたの提案がユーザーの承認を得ることはまずありません。 – CommonsWare
私はそれを最終的に得ましたが、私もsetupWithViewPager()を使用しました。 –