如何显示导航抽屉中的所有活动? [英] How to Display Navigation Drawer in all activities?
问题描述
我有一个导航抽屉
在我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(menuItemsIcon [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屋!