使用活动实现的Android导航抽屉

8

我正在开发自己的Android应用程序,现在有三个不同的活动(Activity A、Activity B和Activity C)。我想要创建一个侧边栏导航抽屉来在它们之间进行导航。我阅读了Android开发者网站上的教程,但他们只关注Fragments。那么,如何使用一个Activity来开发专业的Android应用程序,并使用Fragments开发所有其他屏幕?如果不行,为什么没有记录如何正确实施具有Activities的导航抽屉?谢谢你的帮助。


1
请注意,文档中说只有在您拥有三个以上的顶级视图时才应使用导航抽屉。 - Karol Babioch
1
请问Google Play商店在导航抽屉方面是如何开发的? - koufa
2个回答

16
你需要创建一个名为DrawerActivityBase activity,它将负责所有通用的Drawer navigation操作。其他所有Activity都应该继承自这个DrawerActivity,这样所有的Activity都会有一个Drawer Layout实例。
创建一个包含DrawerLayoutFrameLayoutListView的通用布局。
  <android.support.v4.widget.DrawerLayout>
   <FrameLayout
    android:id="@+id/activity_frame”/>
   <ListView
    android:id="@+id/left_drawer”/>
 </android.support.v4.widget.DrawerLayout>

现在在DrawerActivityonCreate()方法中设置这个布局。
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drawer_layout);
   // do other stuff to initialize drawer layout, add list items
  ……… 
   ……….
  // add a listener to the drawer list view 
 mLeftDrawerList.setOnItemClickListener(new DrawerItemClickListener());

添加一个项目点击监听器

  private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        switch (position) {
            case 0: {
                Intent intent = new Intent(DrawerActivity.this, YourActivity.class);
                startActivity(intent);
                break;
            }
            default:
                break;
        }
        mDrawerLayout.closeDrawer(mLeftDrawerList);
    }
}

最后,所有其他活动将扩展此DrawerActivity
 public class MainActivity extends DrawerActivity {

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   // don’t set any content view here, since its already set in DrawerActivity
   FrameLayout frameLayout = (FrameLayout)findViewById(R.id.activity_frame);
    // inflate the custom activity layout
    LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View activityView = layoutInflater.inflate(R.layout.activity_main, null,false);
    // add the custom layout of this activity to frame layout.
    frameLayout.addView(activityView);
    // now you can do all your other stuffs
    }
 }

您可以在这里查看完整的源代码。


请提供一个扩展DrawerActivity的完整示例。我已经将我的布局填充并将其作为FrameLayout的子视图添加了进去。但它不起作用。我只需要(//将此活动的自定义布局添加到FrameLayout中。)如何正确实现呢? - ayon
请查看我的更新答案。您需要将Activity布局inflate并将其作为子项添加到FrameLayout中。如果您仍然遇到任何问题,请告诉我。 - Libin
啊...我写了完全相同的代码,但是我将frameLayout设置为ViewGroup参数来填充布局。可能这就是我的应用程序似乎陷入无限循环的原因。我会尝试一下,如果可以解决问题,那将是非常有帮助的。非常感谢你的帮助。 - ayon
太好了!谢谢你! - CyberGriZzly
@Libin 如何防止当前活动被打开两次? - Tejas Pandya

-5

你可以在每个Activity中都拥有一个NavigationDrawer,其中填充相同的选项列表。


我考虑过这个问题,但这是常见的做法吗? - koufa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接