抽屉式导航栏,并在Android的
活动我尝试在http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/抽屉式导航栏,并在Android的
上面链接的差给出的导航抽屉(滑轨菜单)和我是不是调用片段,我试图调用活动。当应用程序打开时,我无法看到“导航”抽屉菜单,我只能看到打开HOME活动的操作栏。
这里是我改变了代码:(是否有必要有一个片段或我可以用活动我的抽屉式导航第一屏?)
mTitle = mDrawerTitle = getTitle();
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
navDrawerItems = new ArrayList<NavDrawerItem>();
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(1, -1)));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(2, -1),true, "200"));
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
adapter = new NavDrawerListAdapter(getApplicationContext(), navDrawerItems);
mDrawerList.setAdapter(adapter);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.drawer,
R.string.drawer_open,
R.string.drawer_close
)
{
public void onDrawerClosed(View view)
{
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView)
{
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null)
{
displayView(0);
}
}
private class SlideMenuClickListener implements
ListView.OnItemClickListener
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
displayView(position);
}
}
private void displayView(int position)
{
switch (position)
{
case 0:
//fragment = new HomeFragment();
Intent intent = new Intent(this, Home.class);
startActivity(intent);
return;
case 1:
//fragment = new FindPeopleFragment();
Intent intent1 = new Intent(this, Profile.class);
startActivity(intent1);
break;
case 2:
//fragment = new PhotosFragment();
Intent intent2 = new Intent(this, Details.class);
startActivity(intent2);
break;
default:
break;
}
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
我该如何解决这个问题,以显示我家活动中的导航抽屉?
更新:
我甚至尝试在这个环节给出以下选项:
How can I call one of my activity using navigation drawer ?但我仍然没有得到导航幻灯片菜单。
你不能这么做...... 导航抽屉是一个活动的布局,你不能在另一个活动中显示一个活动,你需要为此使用一个片段!
活动是一个屏幕,您不能在另一个屏幕内显示屏幕,但片段可能是屏幕的一个组件,并且您可以在活动的容器内对片段进行充气,然后向用户显示。
如果你不想这样做,你可以创建一个抽象活动并继承,但是你不会在一个片段中有一个活动,你将拥有多个活动,每个活动都有你自己的导航抽屉。
是的。 'NavigationDrawer'是一个布局,而不是包含一个'FrameLayout'的意思是膨胀'碎片'不活动... – shkschneider 2014-11-03 13:46:24
如果您查看Android导航抽屉的示例文档,它明确定义为使用片段而不是活动从导航栏加载不同的“页面”。随着Android应用生命周期的推移,碎片更容易加载并对Android系统产生较小的影响。它们也可以很容易地置入背景中,并被其他不同的碎片取代。
话虽如此,你最好的办法是将你的活动转换成片段,并使用它们来加载你的应用程序所需的不同页面。这是不是这样一个艰巨的任务,我会告诉你如何:
-
改变所有活动片段
public class nameOfFragment extends Fragment { }
-
使用onCreateView方法,而不是的onCreate
public View onCreateView() { View view = inflater.inflate(R.layout.activity_main, container, false); //any other elements in that view need to be included here in this manner. Button rate = (Button) rootView.findViewById(R.id.rate); return view; }
这些更改应该足以将您的活动更改为片段。 您需要对通过导航栏访问的所有片段执行相同的操作。
如果您需要任何进一步的帮助,请发布您正在使用的活动的代码。 希望这有助于:)
如果你必须有单个抽屉实例,那么你必须去碎片。
如果除了活动之外别无选择,请为所有活动(例如BaseActivity)定义一个基类。在BaseActivity中 - 您可以执行必要的编码来集成抽屉。每个活动扩展BaseActivity现在将显示抽屉菜单(但实例将有所不同)
现在您需要使用工具栏。 Android已经制作了appcompat库,以便在老版本的android中引入材质设计。你需要使用appcompat的编译依赖。 更改style.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
然后,我们将选择有没有旧的行动吧。之后我们在navigation drawer和工具栏之间签订合同。所以我们现在不需要使用旧的操作栏。 您可以参考下面的代码:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff6d7fe2"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp"
></android.support.v7.widget.Toolbar>
您实际上没有显示任何设置导航抽屉的代码。例如,你似乎没有一个'ActionBarDrawerToggle',它实际上将导航图标放在操作栏中。 – 2014-09-04 18:15:23
@ Tanis.7x - 我已经更新了我的问题。请现在看看它!谢谢! – TheDevMan 2014-09-04 18:30:54
正如@Soutu已经指出的那样:'NavigationDrawer'只能在'一个Activity'中工作,在这里你可以交换**几个''Fragments''。如果您正在使用'AndroidStudio',则可以在'New Project'下创建一个'NavigationDrawer' Activity,这为您提供了一个很好的起点。 – longilong 2014-10-29 09:15:56