如何显示导航抽屉中的所有活动? [英] How to Display Navigation Drawer in all activities?

查看:119
本文介绍了如何显示导航抽屉中的所有活动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个导航抽屉在我App.Now我需要那个抽屉出现在我所有的活动。

我看到了许多问题与此类似&功放;找到了解决类似扩展MainActivity与其他活动。

所以,我伸出我的主要活动,以我的第二个Activity.But的抽屉没有被显示在第二个活动

所以帮我在正确的方向:)

感谢您的帮助......

MainActivity

 公共类MainActivity扩展ActionBarActivity
{
    私人的ListView mDrawerList;
    私人DrawerLayout mDrawer;
    私人CustomActionBarDrawerToggle mDrawerToggle;
    私有String []菜单项;

@覆盖
保护无效的onCreate(包savedInstanceState)
{
    super.onCreate(savedInstanceState);
    supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
    // getSupportActionBar()隐藏()。
    的setContentView(R.layout.activity_main_drawer);

    //使动作条的应用程序图标,表现为动作切换导航抽屉
    getSupportActionBar()setDisplayHomeAsUpEnabled(真)。
    getSupportActionBar()setHomeButtonEnabled(真)。

    mDrawer =(DrawerLayout)findViewById(R.id.drawer_layout);

    //设置自定义影子覆盖的主要内容时,抽屉
    //打开
    mDrawer.setDrawerShadow(R.drawable.drawer_shadow,GravityCompat.START);

    _initMenu();
    mDrawerToggle =新CustomActionBarDrawerToggle(这一点,mDrawer);
    mDrawer.setDrawerListener(mDrawerToggle);

}

私人无效_initMenu()
{
    NsMenuAdapter mAdapter =新NsMenuAdapter(本);

    //添加标题
    mAdapter.addHeader(R.string.ns_menu_main_header);

    //添加第一个块

    菜单项= getResources()getStringArray(R.array.ns_menu_items)。
    的String [] menuItemsIcon = getResources()getStringArray(R.array.ns_menu_items_icon)。

    INT RES = 0;
    对于(字符串项:菜单项)
    {

        INT id_title = getResources()则getIdentifier(项目,弦,this.getPackageName())。
        INT id_icon = getResources()则getIdentifier(menu​​ItemsIcon [RES],可拉伸,this.getPackageName())。

        NsMenuItemModel MITEM =新NsMenuItemModel(id_title,id_icon);
        //如果(RES == 1)mItem.counter = 12; //它只是一个例子...
        //如果(RES == 3)mItem.counter = 3; //它只是一个例子...
        mAdapter.addItem(MITEM);
        水库++;
    }

    mAdapter.addHeader(R.string.ns_menu_main_header2);

    mDrawerList =(ListView控件)findViewById(R.id.drawer);
    如果(mDrawerList!= NULL)
        mDrawerList.setAdapter(mAdapter);

    mDrawerList.setOnItemClickListener(新DrawerItemClickListener());

}

@覆盖
保护无效onPostCreate(包savedInstanceState)
{
    super.onPostCreate(savedInstanceState);
    //同步发生onRestoreInstanceState后切换状态。
    mDrawerToggle.syncState();
}

@覆盖
公共无效onConfigurationChanged(配置NEWCONFIG)
{
    super.onConfigurationChanged(NEWCONFIG);
    mDrawerToggle.onConfigurationChanged(NEWCONFIG);
}

@覆盖
公共布尔onCreateOptionsMenu(菜单菜单)
{
    MenuInflater充气= getMenuInflater();
    inflater.inflate(R.menu.control_menu,菜单);
    返回super.onCreateOptionsMenu(菜单);
}

/ *调用当我们调用invalidateOptionsMenu()* /
@覆盖
公共布尔prepareOptionsMenu(功能菜单)上
{
    //如果NAV抽屉被打开,隐藏操作项相关的内容
    // 视图
    布尔drawerOpen = mDrawer.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_keyboard).setVisible(drawerOpen!);
    返回super.on prepareOptionsMenu(菜单);
}

@覆盖
公共布尔onOptionsItemSelected(菜单项项)
{
    / *
     *操作栏的家/上应该打开或关闭抽屉。
     * ActionBarDrawerToggle将照顾这。
     * /
    如果(mDrawerToggle.onOptionsItemSelected(项目))
    {
        返回true;
    }

    //处理您的其他动作条上的项目...
    返回super.onOptionsItemSelected(项目);
}

私有类CustomActionBarDrawerToggle扩展ActionBarDrawerToggle
{

    公共CustomActionBarDrawerToggle(活动mActivity,DrawerLayout mDrawerLayout)
    {
        超(mActivity,mDrawerLayout,R.drawable.ic_drawer,R.string.ns_menu_open,R.string.ns_menu_close);
    }

    @覆盖
    公共无效onDrawerClosed(查看视图)
    {
        。getSupportActionBar()的setTitle(的getString(R.string.ns_menu_close));
        supportInvalidateOptionsMenu(); //创建调用
                                        //在prepareOptionsMenu()
    }

    @覆盖
    公共无效onDrawerOpened(查看drawerView)
    {
        。getSupportActionBar()的setTitle(的getString(R.string.ns_menu_open));
        supportInvalidateOptionsMenu(); //创建调用
                                        //在prepareOptionsMenu()
    }
}

私有类DrawerItemClickListener实现ListView.OnItemClickListener
{

    @覆盖
    公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,长ID)
    {
        意向意图=新的意图(MainActivity.this,Tutorial.class);
        startActivity(意向);

    }

}

 }
 

SecondActivity

 公共类教程扩展MainActivity
{
    @覆盖
    保护无效的onCreate(包savedInstanceState)
    {
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.help);
    }

}
 

解决方案

的onCreate TutorialActivity 不呼叫的setContentView ,而不是这样做:

  @覆盖
保护无效的onCreate(包savedInstanceState)
{
    // TODO自动生成方法存根
    super.onCreate(savedInstanceState);
    LayoutInflater充气=(LayoutInflater)本
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    查看内容查看= inflater.inflate(R.layout.help,空,假);
    mDrawer.addView(内容查看,0);
}
 

mDrawer MainActivity 保护。而在 R.layout.activity_main_drawer 只是不停抽屉的标签,并具备重力元素左(或右)。

I have a Navigation Drawer in my App.Now i need to make that drawer appear in all my activities.

I saw many questions similar to this & found a solution like Extending the MainActivity with the Other Activities .

So i extended My Main Activity to my Second Activity.But the Drawer is not being showed in the Second Activity

So Help me in the Right Direction :)

Thanks for your Help ...

MainActivity

public class MainActivity extends ActionBarActivity
{
    private ListView mDrawerList;
    private DrawerLayout mDrawer;
    private CustomActionBarDrawerToggle mDrawerToggle;
    private String[] menuItems;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR);
    // getSupportActionBar().hide();
    setContentView(R.layout.activity_main_drawer);

    // enable ActionBar app icon to behave as action to toggle nav drawer
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);

    // set a custom shadow that overlays the main content when the drawer
    // opens
    mDrawer.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

    _initMenu();
    mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer);
    mDrawer.setDrawerListener(mDrawerToggle);

}

private void _initMenu()
{
    NsMenuAdapter mAdapter = new NsMenuAdapter(this);

    // Add Header
    mAdapter.addHeader(R.string.ns_menu_main_header);

    // Add first block

    menuItems = getResources().getStringArray(R.array.ns_menu_items);
    String[] menuItemsIcon = getResources().getStringArray(R.array.ns_menu_items_icon);

    int res = 0;
    for (String item : menuItems)
    {

        int id_title = getResources().getIdentifier(item, "string", this.getPackageName());
        int id_icon = getResources().getIdentifier(menuItemsIcon[res], "drawable", this.getPackageName());

        NsMenuItemModel mItem = new NsMenuItemModel(id_title, id_icon);
        // if (res==1) mItem.counter=12; //it is just an example...
        // if (res==3) mItem.counter=3; //it is just an example...
        mAdapter.addItem(mItem);
        res++;
    }

    mAdapter.addHeader(R.string.ns_menu_main_header2);

    mDrawerList = (ListView) findViewById(R.id.drawer);
    if (mDrawerList != null)
        mDrawerList.setAdapter(mAdapter);

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

}

@Override
protected void onPostCreate(Bundle savedInstanceState)
{
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.control_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

/* Called whenever we call invalidateOptionsMenu() */
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
    // If the nav drawer is open, hide action items related to the content
    // view
    boolean drawerOpen = mDrawer.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_keyboard).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    /*
     * The action bar home/up should open or close the drawer.
     * ActionBarDrawerToggle will take care of this.
     */
    if (mDrawerToggle.onOptionsItemSelected(item))
    {
        return true;
    }

    // Handle your other action bar items...
    return super.onOptionsItemSelected(item);
}

private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle
{

    public CustomActionBarDrawerToggle(Activity mActivity, DrawerLayout mDrawerLayout)
    {
        super(mActivity, mDrawerLayout, R.drawable.ic_drawer, R.string.ns_menu_open, R.string.ns_menu_close);
    }

    @Override
    public void onDrawerClosed(View view)
    {
        getSupportActionBar().setTitle(getString(R.string.ns_menu_close));
        supportInvalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
    }

    @Override
    public void onDrawerOpened(View drawerView)
    {
        getSupportActionBar().setTitle(getString(R.string.ns_menu_open));
        supportInvalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
    }
}

private class DrawerItemClickListener implements ListView.OnItemClickListener
{

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        Intent intent = new Intent(MainActivity.this, Tutorial.class);
        startActivity(intent);

    }

}

 }

SecondActivity

 public class Tutorial extends MainActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.help);
    }

}

解决方案

in onCreate of TutorialActivity don't call setContentView instead do this:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    LayoutInflater inflater = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View contentView = inflater.inflate(R.layout.help, null, false);
    mDrawer.addView(contentView, 0); 
}

make mDrawer in MainActivity protected. and in R.layout.activity_main_drawer just keep drawer tag and the element with gravity left(or right).

这篇关于如何显示导航抽屉中的所有活动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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