gpt4 book ai didi

android - 如何在没有错误的情况下在多个 Activity 中加载导航 View ?

转载 作者:行者123 更新时间:2023-11-30 01:47:08 26 4
gpt4 key购买 nike

我按照找到的指南创建了一个导航 View (注意:较新的导航 View ,而不是设置不同的旧抽屉导航)here .我将其设置为打开一个新 Activity ,只是再次重复代码但更改了类和 Intent 语句以反射(reflect)当前 Activity 。 (更改的主要 Activity 扩展到 activity2 扩展等)但是当我这样做时,主要 Activity 中的 TextView 显示在 activity2 中也忽略了 textviewactivity2 .

那么我该如何设置它才能在我的所有 Activity 中显示导航 View ,而无需复制代码数十次并且每个 Activity 都有自己的 textview ?我也是一个新手 android 程序员所以说“应该使用 fragment ”或类似的东西,我需要代码示例来真正理解我需要做什么(再次,请不要让我引用抽屉导航示例,因为这是设置不同的)

最佳答案

我建议您使用简单的方案 - 一个 Activity,许多 Fragments

例如 - 您可以在 Android studio 中使用 Navigation Drawer Activity 创建新项目(尽管它在新版本的 Android studio 中显示为“Navigation Drawer” Activity 将使用 NavigationView 创建)- 它将为您创建一个 MainActivity

为了支持Fragments scheme,您需要在您的Activity 上为这个 fragment 的内容提供特殊的容器。让我们将 FrameLayout 添加到 layout/content_main.xml 文件中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/app_bar_main">

<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>

请注意,我使用 content_frame id 创建了 FrameLayout - 我们稍后会用到它。

然后,例如,创建两个空白 fragment - BlankFragment1BlankFragment2

现在查看 MainActivity 中的代码,而不是 onNavigationItemSelected 方法。默认情况下,它看起来像:

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();

if (id == R.id.nav_camara) {
// Handle the camera action
} else if (id == R.id.nav_gallery) {

} else if (id == R.id.nav_slideshow) {

} else if (id == R.id.nav_manage) {

} else if (id == R.id.nav_share) {

} else if (id == R.id.nav_send) {

}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}

每个if 语句帮助我们区分导航 View 中的菜单项。让我们更改此代码以通过单击 R.id.nav_camara 转到 BlankFragment1 并通过单击 R 转到 BlankFragment2 .id.nav_gallery:

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.

Fragment fragment;
switch (item.getItemId()) {
case R.id.nav_camara:
fragment = BlankFragment1.newInstance("param1", "param2");
break;

case R.id.nav_gallery:
fragment = BlankFragment2.newInstance("param3", "param4");
break;

default:
fragment = BlankFragment1.newInstance("param1", "param2");
}

// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = this.getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}

然后启动应用程序。现在,您可以通过单击这两个图标(相机和图库)来更改 fragment 。希望对你有帮助。

关于android - 如何在没有错误的情况下在多个 Activity 中加载导航 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33561921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com