通过活动实现的Android导航抽屉

时间:2014-05-05 15:49:30

标签: android android-fragments android-activity android-navigation

我正在开发自己的Android应用程序,我来到了一个点,我有三个不同的活动,比如活动A,活动B和活动C.我现在要做的是创建一个导航抽屉来在它们之间导航。我在Android开发者网站上阅读了该教程,但他们只关注片段。如何使用一个Activity开发专业的Android应用程序,而使用Fragments开发所有其他屏幕?如果没有记录,为什么没有记录如何使用Activities来实现正确的导航抽屉呢?谢谢你的帮助。

2 个答案:

答案 0 :(得分:16)

您需要创建Base activity来执行所有常见的Drawer navigation内容。我将此基础Activity称为DrawerActivity,其他所有Activity都应扩展此DrawerActivity。因此,Activity所有Drawer Layout都会有一个实例。

使用DrawerLayout创建一个公共布局,并将FrameLayoutListView作为孩子

  <android.support.v4.widget.DrawerLayout>
   <FrameLayout
    android:id="@+id/activity_frame”/>
   <ListView
    android:id="@+id/left_drawer”/>
 </android.support.v4.widget.DrawerLayout>

现在在onCreate()

上的DrawerActivity中设置此布局
 @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
    }
 }

您可以在此处查看完整的来源https://gist.github.com/libinbensin/613dea436302d3015563

答案 1 :(得分:-5)

您可以在每个活动中使用导航抽屉,填充相同的选项列表。