2

Я хочу, чтобы этот тип конструкции :: Here Is My designКак реализовать tabview в одном из фрагментов bottombar?

Моего mainactivity.xml только содержать frameLayout, который замещается выделенным фрагментом из bottombar пункта меню.

код Это здесь:

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(); 
      } 
     } 

Теперь я хочу, чтобы создать TabView в на одном из фрагмента: За что я реализую на панели инструментов, tablayout и ViewPager в нужный файл фрагмент XML. Я создал отдельный файл java, содержащий класс viewPagerAdapter.

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); 
    } 
} 

Теперь я хочу, чтобы добавить этот код для реализации tablayout ::

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); 

В OnCreate метод фрагмента, приведенных ниже ::

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); 
    } 
} 

Но Android студия не позволяет Tablayout фрагмент код в фрагменте.
Что я могу сделать? Как я могу реализовать 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

Вы должны создать модель согласно вашему требованию. Если у вас есть только вкладка с текстом, вы можете создать модель следующим образом: public class MainNavigationViewModel { int id; Строковый текст; public String getText() { текст возврата; } public void setText (текст строки) { this.text = текст; } Модель содержит методы получения или установки, которые вы должны получить от своей деятельности. Пожалуйста, отдайте upvote, если это сообщение будет полезно для вас. –

+0

this.navigationData.add (новый MainNavigationViewModel («TAB-1», R.drawable.TAB-1, R.drawable.TAB-1, true)); Что такое 2-й и 3-й аргументы конструктора MainNavigationViewModel?что этот файл содержит? и tabLayout.addTab (tabLayout.newTab(). setCustomView (ViewHelper.buildTabWithText (getContext(), vm.getText(), vm.getIsSelected()))); и что такое ViewHelper? что он содержит? –

 Смежные вопросы

  • Нет связанных вопросов^_^