当前位置: 首页 > 知识库问答 >
问题:

Android中的导航抽屉和活动

田曜瑞
2023-03-14

我正在试用本教程中给出的导航抽屉(幻灯片菜单)。

上面的链接和我的不同之处在于,我试图调用活动而不是调用片段。当应用程序打开时,我无法看到导航抽屉菜单,我只能看到打开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);
}

我如何解决这个问题,以便在我的家庭活动中显示导航抽屉?

更新:

我甚至尝试了以下链接中给出的选项:

如何使用导航抽屉调用我的活动之一?但我仍然没有得到导航幻灯片菜单。

共有3个答案

唐修明
2023-03-14

你已经有了构建和显示导航栏的代码,对吗?将上面的代码放入基本活动类。然后,要访问导航栏的每个活动都应继承该基类。

谷歌的IO 2014应用程序也做了同样的事情,看看他们的来源。

当你这样做时,你需要找到一种方法来保持抽屉的状态,因为你过渡到下一个活动。我不知道如何做到这一点,但您可能会在IO应用程序的源代码中找到答案。

澹台硕
2023-03-14

如果您查看Android Navigation drawer的示例文档,它明确定义为使用片段而不是活动从导航栏加载不同的“页面”。随着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;
    }
    

    这些改变应该足以将你的活动变成碎片。您需要对通过导航栏访问的所有片段执行相同的操作。

    如果您需要任何进一步的帮助,请发布您正在使用的活动的代码。希望这有帮助:)

  • 南宫炜
    2023-03-14

    你不能那样做。。。导航抽屉是一个活动的布局,你不能在另一个活动中显示一个活动,你需要使用一个片段!

    一个活动就是一个屏幕,你不能在另一个屏幕中显示屏幕,但片段可能是屏幕的一个组成部分,你可以在一个活动的容器中膨胀片段,然后向用户显示。

    如果你不想这样做,你可以创建一个抽象活动并继承,但你不会在一个片段中有一个活动,你会有多个活动,每个活动都有自己的导航抽屉。

     类似资料:
    • 我正在尝试使用Visual Studio2017在Xamarin中创建一个导航抽屉。我在谷歌做了一些研究后创建了导航抽屉。但当我尝试从菜单中打开活动时,导航抽屉消失了。 我想在我的所有活动中都有我的导航抽屉,而不是在所有活动中重复。 链接到我的项目:https://github.com/chindara/XamarinAndroidNavigationDrawer 更新链接:https://git

    • 有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:

    • 问题内容: 有没有一种方法可以只配置一次导航抽屉,并在多个Activites上显示它? 问题答案: 为此,只需创建一个实现抽屉的BaseActivity类,然后让所有其他活动扩展该抽屉即可。

    • 有没有一种方法可以只配置一次导航抽屉,并在多个活动上显示它?

    • 如何在所有活动中显示我的导航抽屉 在android studio中创建了一个新项目并有了导航抽屉活动后,我运行了它,但它没有显示在我的所有活动中。(我没有添加任何代码,只是创建活动并运行它)。我想知道如何在所有活动中显示导航抽屉,有什么办法吗?

    • 我是android新手。我想实现一个由项目列表组成的导航抽屉,单击它会打开一个新活动。基本上是所有活动的导航抽屉。当我从导航抽屉中选择一个项目时,特定的活动就会打开。导航抽屉代码是通过执行空活动来实现的。我想在所有活动中实现导航抽屉功能,这些活动被视为空活动,这些活动已经有了一些功能,导航抽屉功能也可以工作。请帮帮我。 这是activity_header档案 这是我的主要活动 这是头活动java代