0

下のタブをスワイプしたいと思います。私は、BottomNavigationViewを使ってViewPagerをthisで使っています。私のコードは以下の通りです。下のナビゲーションビューを使用しているviewpagerはフラグメントをスワイプしません

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".MainActivity"> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/navigation" 
     android:layout_alignParentTop="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.BottomNavigationView 
     android:id="@+id/navigation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     app:menu="@menu/bottom_navigation_items" 
     android:background="@color/colorPrimary" 
     app:itemIconTint="@color/colorAccent" 
     app:itemTextColor="@android:color/white"></android.support.design.widget.BottomNavigationView> 
</RelativeLayout> 

Javaコード

public class MainActivity extends AppCompatActivity { 
    BottomNavigationView bottomNavigationView; 
    ViewPager viewPager; 
    MenuItem prevMenuItem; 
    FragmentWallet fragmentWallet; 
    FragmentNavigationDrawer fragmentNavigationDrawer; 
    FragmentHome fragmentHome; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation); 
     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

       switch (item.getItemId()) { 
        case R.id.action_menu_home: 
         viewPager.setCurrentItem(0); 
         break; 
        case R.id.action_menu_wallet: 
         viewPager.setCurrentItem(1); 
         break; 
        case R.id.action_menu_navigation_d: 
         viewPager.setCurrentItem(2); 
         break; 
       } 

       return false; 
      } 
     }); 
     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 
       if (prevMenuItem != null) { 
        prevMenuItem.setChecked(false); 
       } else { 
        bottomNavigationView.getMenu().getItem(0).setChecked(false); 
       } 
       Log.d("page", "onPageSelected: " + position); 
       bottomNavigationView.getMenu().getItem(position).setChecked(true); 
       prevMenuItem = bottomNavigationView.getMenu().getItem(position); 

      } 


      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
     viewPager.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       return true; 
      } 
     }); 
     setupViewPager(viewPager); 

    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     fragmentHome = new FragmentHome(); 
     fragmentWallet = new FragmentWallet(); 
     fragmentNavigationDrawer = new FragmentNavigationDrawer(); 
     viewPagerAdapter.addFragment(fragmentHome); 
     viewPagerAdapter.addFragment(fragmentWallet); 
     viewPagerAdapter.addFragment(fragmentNavigationDrawer); 
     viewPager.setAdapter(viewPagerAdapter); 
    } 
} 

ビューページャアダプタのコードであることを別のフラグメントからナビゲートするための良好な動作しますが、それは断片をスワイプされていない

public class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 
    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment) { 
     mFragmentList.add(fragment); 
    } 
} 

です。助けてください、または私は別の解決策をいくつか切り替える必要があります。

答えて

1

この部分を削除します。

viewPager.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return true; 
     } 
    }); 
+0

感謝を。できます:) –

関連する問題