导航抽屉切换活动,而不是片段

是否有可能在android中使用导航抽屉,而不是更新片段,我想在应用程序内作为我的导航方式在活动之间切换。导航抽屉切换活动,而不是片段

回答:

是的,这是可能的 - 这是我为我的应用程序做的。我已经完成了一些活动,而不是将它们全部转换为碎片,我想调整导航抽屉以适用于所有这些活动。不幸的是,这不是一个快速的解决方法,所以如果你有使用碎片的选择,我会去那里。但不管我是怎么做到的:

比方说,我有2个活动,我想要两个导航抽屉。在每个版本的layout.xml中,我指定DrawerLayout和适当的ListView来保存我的导航选项。实质上,每次在活动之间切换时都会创建导航抽屉,从而使外观保持不变。为了让生活变得更轻松,我采用了设置导航抽屉并将它们放入自己的班级所需的常用方法:NavigationDrawerSetup.java。这样,我的活动,可以使用相同的自定义适配器等

在这个NavigationDrawerSetup.java类,我有以下几点:

  • configureDrawer() - 这树立ActionBarActionBarDrawerToggle,以及所需的听众
  • 我的自定义阵列适配器(用于填充列表中的导航选项)
  • selectOptions()方法,该方法处理抽屉项目点击

当您在其中一项活动中设置导航抽屉时,只需创建一个新的NavigationDrawerSetup对象并传递所需的布局参数(如DrawerLayout,ListView等)。然后你会打电话configureDrawer()

 navigationDrawer = new NavigationDrawerSetup(mDrawerView, mDrawerLayout, 

mDrawerList, actionBar, mNavOptions, currentActivity);

navigationDrawer.configureDrawer();

currentActivity由于导航抽屉被绑定到你的活动传递英寸您将有当您设置ActionBarDrawerToggle使用它:

​​

您还需要使用currentActivity设置自定义Adapter时:

至于如何通过导航抽屉活动之间进行切换,你可以建立新的意图你的选择信息()方法中:

private void selectItem(int position) { 

// Handle Navigation Options

Intent intent;

switch (position) {

case 0:

intent = new Intent(currentActivity, NewActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

currentActivity.startActivity(intent);

break;

case 1:

// etc.

}

只要确保你的新Activity也有抽屉式导航栏的设置,它应该显示。

有很多事情可以根据自己的需要来定制这种方法,但这是我如何做到的一般结构。希望这可以帮助!

回答:

作为@ David-Crozier指出的解决方案的一个小改进,为了避免两个动画重叠(关闭NavigationDrawer并开始一个新的活动),您可以在方法中包含一些延迟在iosched应​​用v2014:

private void onNavDrawerItemClicked(final int itemId) { 

if (itemId == getSelfNavDrawerItem()) {

mDrawerLayout.closeDrawer(GravityCompat.START);

return;

}

if (isSpecialItem(itemId)) {

goToNavDrawerItem(itemId);

} else {

// launch the target Activity after a short delay, to allow the close animation to play

mHandler.postDelayed(new Runnable() {

@Override

public void run() {

goToNavDrawerItem(itemId);

}

}, NAVDRAWER_LAUNCH_DELAY);

// change the active item on the list so the user can see the item changed

setSelectedNavDrawerItem(itemId);

// fade out the main content

View mainContent = findViewById(R.id.main_content);

if (mainContent != null) {

mainContent.animate().alpha(0).setDuration(MAIN_CONTENT_FADEOUT_DURATION);

}

}

mDrawerLayout.closeDrawer(GravityCompat.START);

}

下面的链接以供参考:https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/BaseActivity.java

回答:

你需要一个BaseDrawerActivity实现了这个抽屉式导航然后在每个需要抽屉式导航活动延长BaseDrawerActivity

首先创建BaseDrawerActivity.java

​​

然后在res/layout文件夹中创建activity_base_drawer.xml

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/drawer_layout"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:openDrawer="start">

<include layout="@layout/app_bar_home"/>

<android.support.design.widget.NavigationView

android:id="@+id/nav_view"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_gravity="start"

app:headerLayout="@layout/nav_header_home"

app:menu="@menu/activity_home_drawer" />

</android.support.v4.widget.DrawerLayout>

其中@layout/app_bar_home是:

<?xml version="1.0" encoding="utf-8"?> 

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="?attr/colorPrimary"

app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<FrameLayout android:id="@+id/content_frame"

android:layout_width="match_parent"

android:layout_height="match_parent" />

</android.support.design.widget.CoordinatorLayout>

下一页输入您的活动,将有抽屉式导航栏如CameraActivity.java

public class CameraActivity extends BaseDrawerActivity { 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getLayoutInflater().inflate(R.layout.activity_camera, frameLayout);

/**

* Setting title

*/

setTitle("Camera");

}

@Override

protected void onResume() {

super.onResume();

// to check current activity in the navigation drawer

navigationView.getMenu().getItem(0).setChecked(true);

}

}

哪里R.layout.activity_camera是你CameraActivity.java布局。

然后创建其他活动一样GalleryActivity.java等,将有抽屉式导航:

public class GalleryActivity extends BaseDrawerActivity { 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getLayoutInflater().inflate(R.layout.activity_gallery, frameLayout);

// Setting title

setTitle("Gallery");

}

@Override

protected void onResume() {

super.onResume();

navigationView.getMenu().getItem(1).setChecked(true);

}

}

以上是 导航抽屉切换活动,而不是片段 的全部内容, 来源链接: utcz.com/qa/265863.html

回到顶部