导航抽屉切换活动,而不是片段
是否有可能在android中使用导航抽屉,而不是更新片段,我想在应用程序内作为我的导航方式在活动之间切换。导航抽屉切换活动,而不是片段
回答:
是的,这是可能的 - 这是我为我的应用程序做的。我已经完成了一些活动,而不是将它们全部转换为碎片,我想调整导航抽屉以适用于所有这些活动。不幸的是,这不是一个快速的解决方法,所以如果你有使用碎片的选择,我会去那里。但不管我是怎么做到的:
比方说,我有2个活动,我想要两个导航抽屉。在每个版本的layout.xml中,我指定DrawerLayout
和适当的ListView
来保存我的导航选项。实质上,每次在活动之间切换时都会创建导航抽屉,从而使外观保持不变。为了让生活变得更轻松,我采用了设置导航抽屉并将它们放入自己的班级所需的常用方法:NavigationDrawerSetup.java
。这样,我的活动,可以使用相同的自定义适配器等
在这个NavigationDrawerSetup.java
类,我有以下几点:
configureDrawer()
- 这树立ActionBar
,ActionBarDrawerToggle
,以及所需的听众- 我的自定义阵列适配器(用于填充列表中的导航选项)
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