2

私はこのタイプの設計:: Here Is My designどのように下部バーの断片のいずれかでtabviewを実装するには?

マイmainactivity.xmlのみbottombarメニュー項目から選択したフラグメントで置き換えられるでframeLayoutが含まれていたいです。

それのコードはここにある: 私は、ツールバー、tablayoutと必要なフラグメントxmlファイル内viewpagerを実装する場合:

b = BottomBar.attach(this,savedInstanceState); 
    b.setItemsFromMenu(R.xml.menu_main, new OnMenuTabClickListener() { 
     @Override 
     public void onMenuTabSelected(@IdRes int menuItemId) { 
      if(menuItemId == R.id.BottomBarItemOne){ 
       PeopleFragment p = new PeopleFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.frame,p).commit(); 
      } 
      else if(menuItemId == R.id.BottomBarItemTwo){ 
       LocationFragment l = new LocationFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.frame,l).commit(); 
      } 
      else if(menuItemId == R.id.BottomBarItemThree){ 
       HistoryFragment h = new HistoryFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.frame,h).commit(); 
      } 
      else if(menuItemId == R.id.BottomBarItemFour){ 
       LikesFragment li = new LikesFragment(); 
       getSupportFragmentManager().beginTransaction().replace(R.id.frame,li).commit(); 
      } 
     } 

は、今私は断片の1にでtabviewを作成したいです。 viewPagerAdapterクラスを含む別々のJavaファイルを作成しました。

public class viewPagerAdapter extends FragmentPagerAdapter { 

ArrayList<Fragment> fragments = new ArrayList<>(); 
ArrayList<String> tabTitles = new ArrayList<>(); 

    public void addFragment(Fragment fragment,String tabTitle){ 
     fragments.add(fragment); 
     tabTitles.add(tabTitle); 
    } 

    public viewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabTitles.get(position); 
    } 
} 

今、私は

public class HomeFragment extends Fragment { 


    public HomeFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

     // TabLyout Code Here 

     return inflater.inflate(R.layout.fragment_home, container, false); 
    } 
} 

::

下記のフラグメントののonCreateメソッドで
toolbar = (Toolbar) findViewById(R.id.toolBar); 
    setSupportActionBar(toolbar); 

    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
    viewPager = (ViewPager) findViewById(R.id.viewPager); 

    viewPagerAdapter = new viewPagerAdapter(getSupportFragmentManager()); 
    viewPagerAdapter.addFragment(new HomeFragment(),"Home"); 
    viewPagerAdapter.addFragment(new MessageFragment(),"Message"); 
    viewPagerAdapter.addFragment(new ContectFragment(),"Contect"); 
    viewPager.setAdapter(viewPagerAdapter); 
    tabLayout.setupWithViewPager(viewPager); 

:: tablayoutを実装するためにこのコードを追加したいが、AndroidのメーカーがTablayoutフラグメントはできません。フラグメント内のコード。
何ができますか? フラグメントの1つにtablayoutを実装するにはどうすればよいですか?

答えて

0

次の方法を試してください。 要件に応じてフラグメントレイアウトに追加してください。

<android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="0dp" 
      android:layout_weight="1" 
      android:layout_height="50dp" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:tabIndicatorColor="@color/tab_indicator" 
      app:tabIndicatorHeight="2.5dp" 
      app:tabPaddingBottom="-1dp" 
      app:tabPaddingEnd="-1dp" 
      app:tabPaddingStart="-1dp" 
      app:tabPaddingTop="-1dp" 
      app:tabBackground="@color/white"/> 
  1. 表示したいあなたのタブの一つのモデルを作成します。今すぐあなたのフラグメントに次のコードを追加
  2. this.navigationData = new ArrayList<>(); 
    this.navigationData.add(new MainNavigationViewModel("TAB-1",  R.drawable.TAB-1, R.drawable.TAB-1, true)); 
    this.navigationData.add(new MainNavigationViewModel("TAB-2", R.drawable.TAB-2, R.drawable.TAB-2, false)); 
    this.navigationData.add(new MainNavigationViewModel("TAB-3", R.drawable.TAB-3, R.drawable.TAB-23, false)); 
    
    for (MainNavigationViewModel vm : this.navigationData) { 
        tabLayout.addTab(tabLayout.newTab().setCustomView(ViewHelper.buildTabWithText(getContext(), vm.getText(), vm.getIsSelected()))); 
    } 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    
    adapter = new MainFragmentPagerAdapter(getChildFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    
  3. は今、このようなFragmentPagerAdapter(新クラス)を作成します。

    public class MainFragmentPagerAdapter extends FragmentPagerAdapter { 
    private static final Fragment[] fragments = new Fragment[] { 
         LiveFeedFragment.getInstance(), 
         GroupsFragment.getInstance(), 
         NewsFragment.getInstance() 
    }; 
    int mNumOfTabs; 
    
    public MainFragmentPagerAdapter(FragmentManager fm, int NumOfTabs) { 
        super(fm); 
        this.mNumOfTabs = NumOfTabs; 
    } 
    
    @Override 
    public int getItemPosition(Object object) { 
        return POSITION_NONE; 
    } 
    
    @Override 
    public Fragment getItem(int position) { 
        return fragments[position]; 
        } 
    
    @Override 
    public int getCount() { 
        return mNumOfTabs; 
    } 
    

    }

そして、この方法のようにフラグメントにアクセスします。

+0

私はAndroidの学習を始めました。どうすれば教えてください。タブのモデル(MainNavigationViewModel)を作成するにはどうしたらいいですか?それには何が入っていますか –

+0

お客様の要件に従ってモデルを作成する必要があります。テキスト付きのタブしかない場合は、次のようにモデルを作成できます。 パブリッククラスMainNavigationViewModel { int id; 文字列テキスト。 public String getText(){ 返品テキスト; } public void setText(String text){ this.text = text; } } モデルには、アクティビティからアクセスする必要のあるゲッターまたはセッターメソッドが含まれています。 この投稿はあなたに役立つ場合は、upv​​oteを与えてください。 –

+0

this.navigationData.add(新しいMainNavigationViewModel( "TAB-1"、R.drawable.TAB-1、R.drawable.TAB-1、true)); MainNavigationViewModelコンストラクタの第2引数と第3引数は何ですか?このファイルには何が入っていますか?およびtabLayout.addTab(tabLayout.newTab()。setCustomView(ViewHelper.buildTabWithText(getContext()、vm.getText()、vm.getIsSelected()))); ViewHelperとは何ですか?それには何が入っていますか –

関連する問題