在我的第一个 Android 应用程序中,我为此活动创建了 NoteActivity(不是 MainActivity)和片段、数据库、视图模型、导航等。
问题是,当我在单击应该打开 NoteActivity 的按钮后使用模拟器打开应用程序时,它会导航到 MainActivity。
我认为 AndroidManifest 或 build.gradle 实现中可能存在一些问题。
AndroidManifest(DzennikPodrozy 中提到了 NoteActivity):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<application
android:allowBackup="true"
android:requestLegacyExternalStorage="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.DuoTravel_v14"
tools:targetApi="31">
<activity
android:name=".DzennikPodrozy"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="andorid.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<activity
android:name=".MapyActivity"
android:exported="false"
android:label="@string/title_activity_mapy"
android:theme="@style/Theme.DuoTravel_v14" />
<activity
android:name=".StronaGlowna"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="*************************************" />
</application>
<queries>
<intent>
<action android:name="android.intent.action.MANAGE_EXTERNAL_STORAGE" />
</intent>
</queries>
</manifest>
Build.gradle(模块)
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.kapt")
id("kotlin-parcelize")
id("kotlin-kapt")
}
android {
namespace = "pl.duotravel.duotravel_v14"
compileSdk = 34
defaultConfig {
applicationId = "pl.duotravel.duotravel_v14"
minSdk = 28
targetSdk = 34
versionCode = 1
versionName = "1.0"
kapt {
correctErrorTypes = true
}
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures{
viewBinding = true
}
}
dependencies {
implementation ("pub.devrel:easypermissions:3.0.0")
implementation("androidx.fragment:fragment-ktx:1.6.2")
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.10.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("com.google.android.gms:play-services-maps:18.2.0")
implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
implementation("androidx.navigation:navigation-ui-ktx:2.7.5")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
// Architectural Components
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2")
// Room
implementation("androidx.room:room-runtime:2.6.0")
implementation("androidx.room:room-ktx:2.6.0")
// Navigation Components
implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
implementation("androidx.navigation:navigation-ui-ktx:2.7.5")
implementation("androidx.navigation:navigation-dynamic-features-fragment:2.7.5")
}
Build.gradle(项目)
import com.android.build.gradle.internal.dsl.decorator.SupportedPropertyType.Collection.List.type
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.1.3" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath ("com.android.tools.build:gradle:7.5.1")
classpath ("org.jetbrains.kotlin:kotlin-gradle-plugin")
classpath ("androidx.navigation:navigation-safe-args-gradle-plugin:2.5.0")
}
}
对于一个很长的团队来说,我一直在 NoteActivity 代码中搜索问题,但它似乎已经完成。
如果您需要项目中的更多代码来帮助我,这不是问题
谢谢大家!
mainfest(App 包含的内容)决定了 App 的组成部分,包括首次启动的 Activity。
具有 action
.MAIN
的活动是已启动的活动。默认情况下,当您创建项目时,它将是 MainActivity。
即你有
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
要使 DzennikPodrozy 成为启动的活动,然后将 action 从 MainActivity 移动到 DzennikPodrozy 活动。
一个简化的最小示例。采取的步骤:-
所以清单包括:-
<activity
android:name=".DzennikPodrozy"
android:exported="true" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
当应用程序运行时,MainActivity 启动:-
将清单更改为:-
<activity
android:name=".DzennikPodrozy"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
</activity>
然后:-
即根据 DzennikPodrozy 活动的布局,TextView 具有青色背景。