关于ZAKER 融媒体解决方案 合作 加入

android- 如何一起实现导航抽屉和 SlidingTabLayo.

CocoaChina 10-23

我已经实现了导航抽屉 . 这是 activity_nav_drawer:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout"android:layout_width="match_parent" android:layout_height="match_parent"tools:context="com.example.jyot.advanceparking.NavDrawer"><FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" /><fragment android:id="@+id/navigation_drawer" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:layout_gravity="start" android:name="com.example.jyot.advanceparking.NavigationDrawerFragment" tools:layout="@layout/fragment_navigation_drawer" />

这是 NavDrawer.java:

public class NavDrawer extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks {/** * Fragment managing the behaviors, interactions and presentation of the navigation drawer. */private NavigationDrawerFragment mNavigationDrawerFragment;/** * Used to store the last screen title. For use in {@link #restoreActionBar ( ) }. */private CharSequence mTitle;@Overrideprotected void onCreate ( Bundle savedInstanceState ) { super.onCreate ( savedInstanceState ) ; setContentView ( R.layout.activity_nav_drawer ) ; mNavigationDrawerFragment = ( NavigationDrawerFragment ) getSupportFragmentManager ( ) .findFragmentById ( R.id.navigation_drawer ) ; mTitle = getTitle ( ) ; // Set up the drawer. mNavigationDrawerFragment.setUp ( R.id.navigation_drawer, ( DrawerLayout ) findViewById ( R.id.drawer_layout ) ) ;}@Overridepublic void onNavigationDrawerItemSelected ( int position ) { Fragment objFragment = null; switch ( position ) { case 0: objFragment = new Menu1_Fragment ( ) ; break; case 1: objFragment = new Menu2_Fragment ( ) ; break; case 2: objFragment = new Menu3_Fragment ( ) ; break; } // update the main content by replacing fragments FragmentManager fragmentManager = getSupportFragmentManager ( ) ; fragmentManager.beginTransaction ( ) .replace ( R.id.container, objFragment ) .commit ( ) ;}public void onSectionAttached ( int number ) { switch ( number ) { case 1: mTitle = getString ( R.string.title_section1 ) ; break; case 2: mTitle = getString ( R.string.title_section2 ) ; break; case 3: mTitle = getString ( R.string.title_section3 ) ; break; }}public void restoreActionBar ( ) { ActionBar actionBar = getSupportActionBar ( ) ; actionBar.setNavigationMode ( ActionBar.NAVIGATION_MODE_STANDARD ) ; actionBar.setDisplayShowTitleEnabled ( true ) ; actionBar.setTitle ( mTitle ) ;}@Overridepublic boolean onCreateOptionsMenu ( Menu menu ) { if ( !mNavigationDrawerFragment.isDrawerOpen ( ) ) { // Only show items in the action bar relevant to this screen // if the drawer is not showing. Otherwise, let the drawer // decide what to show in the action bar. getMenuInflater ( ) .inflate ( R.menu.nav_drawer, menu ) ; restoreActionBar ( ) ; return true; } return super.onCreateOptionsMenu ( menu ) ;}@Overridepublic boolean onOptionsItemSelected ( MenuItem item ) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId ( ) ; //noinspection SimplifiableIfStatement if ( id == R.id.action_settings ) { return true; } return super.onOptionsItemSelected ( item ) ;}/** * A placeholder fragment containing a simple view. */public static class PlaceholderFragment extends Fragment { /** * The fragment argument representing the section number for this * fragment. */ private static final String ARG_SECTION_NUMBER = "section_number"; /** * Returns a new instance of this fragment for the given section * number. */ public static PlaceholderFragment newInstance ( int sectionNumber ) { PlaceholderFragment fragment = new PlaceholderFragment ( ) ; Bundle args = new Bundle ( ) ; args.putInt ( ARG_SECTION_NUMBER, sectionNumber ) ; fragment.setArguments ( args ) ; return fragment; } public PlaceholderFragment ( ) { } @Override public View onCreateView ( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) { View rootView = inflater.inflate ( R.layout.fragment_nav_drawer, container, false ) ; return rootView; } @Override public void onAttach ( Activity activity ) { super.onAttach ( activity ) ; ( ( NavDrawer ) activity ) .onSectionAttached ( getArguments ( ) .getInt ( ARG_SECTION_NUMBER ) ) ; }}

}

我的导航抽屉中的每个项目都对应一个片段 , 即 Menu1_Fragment,Menu2_Fragment,Menu3_Fragment, 每个项目都有自己的布局文件 .

现在 , 我想仅在导航抽屉的第一项即 Menu1_Fragment 中实现 SlidingTabLayout.

我该怎么做呢?我看了很多教程 , 但是所有这些教程都是在单独的 Activity 中实现 SlidingTabLayout 的 , 但是我想在 Navigation Drawer 的 Fragment 中实现它 . ( 或者也许可以在 " 导航抽屉活动 " 中仅针对第一个片段实现该功能 , 我不知道 ) .

我已经复制了 SlidingTabLayout.java 和 SlidingTabStrip.java 的 Java 源文件 . 请建议我如何进行此操作 .

最佳答案

弄清楚了 . 遵循了本教程:

http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html

我在片段而不是活动上实现了本教程 . 该片段是我的导航抽屉的第一部分或片段 . 唯一的区别是 , 我在 Fragment 的布局和 Java 文件中而不是在 NavDrawer Activity 的文件中编写了代码 . Java 代码需要用 onCreateView ( ) 而不是 onCreate ( ) 编写 , 因为它是片段 . 其次 , 在 Fragment 的 Java 代码中 , 我们需要在 ViewPagerAdapter 的构造函数调用中传递参数 getChildFragmentManager 而不是 getSupportFragmentManager.

这是 Java 代码:

package com.example.jyot.advanceparking; public class Menu1_Fragment extends Fragment {ViewPager pager;ViewPagerAdapter adapter;SlidingTabLayout tabs;CharSequence Titles [ ] ={"Home","Events"};int Numboftabs =2;View rootView;@Overridepublic View onCreateView ( LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState ) { rootView = inflater.inflate ( R.layout.menu1_layout, container, false ) ; // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs. adapter = new ViewPagerAdapter ( getChildFragmentManager ( ) , Titles, Numboftabs ) ; // Assigning ViewPager View and setting the adapter pager = ( ViewPager ) rootView.findViewById ( R.id.pager ) ; pager.setAdapter ( adapter ) ; // Assiging the Sliding Tab Layout View tabs = ( SlidingTabLayout ) rootView.findViewById ( R.id.tabs ) ; tabs.setDistributeEvenly ( true ) ; // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width // Setting the ViewPager For the SlidingTabsLayout tabs.setViewPager ( pager ) ; return rootView;}

}

之后 , 只需按照本教程进行操作即可 .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 android抽屉源文件

觉得文章不错,微信扫描分享好友

扫码分享