如何实现导航抽屉和SlidingTabLayout在一起吗? [英] How to implement Navigation Drawer and SlidingTabLayout together?

查看:183
本文介绍了如何实现导航抽屉和SlidingTabLayout在一起吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了抽屉式导航栏。这是activity_nav_drawer:

I have implemented the Navigation Drawer. This is 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:

This is 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;

@Override
protected 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));
}


@Override
public 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);
}


@Override
public 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);
}

@Override
public 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每个有自己的布局文件。

Each item in my Navigation Drawer corresponds to a fragment, namely Menu1_Fragment, Menu2_Fragment, Menu3_Fragment with each having its own layout file.

现在我想只是我的抽屉式导航即Menu1_Fragment的第一项来实现SlidingTabLayout。

Now I want to implement a SlidingTabLayout in just the first item of my Navigation Drawer i.e. the Menu1_Fragment.

我如何做到这一点?我看过很多教程,但在一个单独的活动所有这些都实现了SlidingTabLayout但我想实现它在导航抽屉的片段。 (或者也可以在导航抽屉活动实施了只是一个片段,我不知道)。

How do I do this? I have watched many tutorials but all of those implement the SlidingTabLayout in a seperate Activity but I want to implement it in a Fragment of Navigation Drawer. (or maybe it can be implemented in the Navigation Drawer Activity for just the first fragment, I don't know).

我已经复制了SlidingTabLayout.java和SlidingTabStrip.java Java源文件。请建议我如何处理这一点。

I've copied the java source files for SlidingTabLayout.java and SlidingTabStrip.java. Please suggest me how to proceed on this.

推荐答案

想通了。遵循本教程:

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

我实施了一个片段,而不是活动本教程。该片段是我的抽屉式导航首节或片段。唯一的区别是,我写了code在我的片段布局和Java文件,而不是我的NavDrawer活动的文件。该在Java code需要的 onCreateView()而不是的onCreate(),因为它的一个片段被写入。其次在我们的片段在Java code,我们需要传递参数的 getChildFragmentManager 而不是 getSupportFragmentManager ViewPagerAdapter 的构造函数调用。

I implemented this tutorial on a fragment instead of an activity. The fragment was the first section or fragment of my Navigation Drawer. The only differences were that I wrote the code in my Fragment's layout and Java file instead of my NavDrawer Activity's files. The the Java code needs to be written in onCreateView() instead of onCreate() because its a Fragment. Secondly in the Java code of our Fragment, we need to pass the parameter getChildFragmentManager instead of getSupportFragmentManager in the constructor call of ViewPagerAdapter.

下面是在Java code:

Here's the Java Code :

    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;

@Override
public 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;
}

}

在此只是按照教程,因为它是。

After this just follow the tutorial as it is.

这篇关于如何实现导航抽屉和SlidingTabLayout在一起吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆