web-dev-qa-db-ja.com

下部のナビゲーションとビューページャーでタブレイアウトを使用するにはどうすればよいですか?

bottom navigation barでアクティビティを作成しました。別のフラグメントに切り替えたいときにtablayoutが必要です。そして、tablayoutviewpagerを制御できます。指定されたフラグメントにviewpagerを配置できますか?

私はこれが好きです:

enter image description here

これが現在の結果です。赤いボックスにviewpagerを入れたいです。

enter image description here

4
JerryLi

これを試して、BottomNavigationViewTabLayoutViewPagerと同期してください

    myBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            int id = item.getItemId();

            if (id == R.id.action_one) {
                myViewPager.setCurrentItem(0);
            }else if (id == R.id.action_two) {
                myViewPager.setCurrentItem(1);
            }else if (id == R.id.action_three) {
                myViewPager.setCurrentItem(2);
            }else if (id == R.id.action_four) {
                myViewPager.setCurrentItem(3);
            }
            return false;
        }
    });


    myViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (position == 0) {
                myBottomNavigationView.setSelectedItemId(R.id.action_one);
            }else if (position == 1) {
                myBottomNavigationView.setSelectedItemId(R.id.action_two);
            }else if (position == 2) {
                myBottomNavigationView.setSelectedItemId(R.id.action_three);
            }else if (position == 3) {
                myBottomNavigationView.setSelectedItemId(R.id.action_four);
            }
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
1
Nilesh Rathod

ビューページャーをアクティビティに配置する必要があります。ビューページャーアダプタを作成します。アダプターで別のフラグメントを接続します。その後、アクティビティの例でアダプタを設定できます。申し訳ありませんが、vewPagerの前にタブレイアウトを配置する必要があります。ビューページャーアダプタでタブレイアウトを接続します。

activity_main.xml

<LinearLayout 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"
Android:orientation="vertical"
Android:id="@+id/assignment_activitly"
>
<Android.support.design.widget.TabLayout
       Android:id="@+id/tablayout"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       app:tabMode="fixed"
       Android:background="@color/colorPrimary"
       app:tabTextColor="@color/textPrimary"
       app:tabSelectedTextColor="@color/colorAccent"
       app:tabTextAppearance="@style/Tab"
       />
   <Android.support.v4.view.ViewPager
       Android:id="@+id/viewpager"
       Android:layout_width="match_parent"
       Android:layout_height="match_parent"
       Android:background="@Android:color/white"
       />
</LinearLayout>

MainActivity.Java

public class MainActivity extends Activity {
   ViewPager viewpager;
   TabLayout tabLayout;
   public void onCreate(Bundle savedInstanceState) {
   viewpager = findViewById(R.id.viewpager);
   tabLayout = findViewById(R.id.tablayout);
   super.onCreate(saveedInstanceState);
   .........
   ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
   viewpager.setViewPager(adapter);
   tabLayout.setupWithViewPager(viewPager);     
   }
}

ViewPagerAdapter

public class ViewPagerAdapter extends FragmentPagerAdapter {
 private String tabTitles [] = new String[] {"title first", "title Second"};
  public ViewPagerAdapter(FragmentManager fm) {
    super(fm);

}

@Override
public Fragment getItem(int position) {
    if (position == 0) {
        return new YourFragmentFirst();
    } else if (....){
        return new YourFragmentSeconde();
    }
    ........  
}

@Override
public int getCount() {
    return  //return your number of Fragment;
}

@Override
public CharSequence getPageTitle(int position) {
    return tabTitles[position];
}
}
1