gpt4 book ai didi

java - 多个 Intent 过滤器到多个 Activity

转载 作者:行者123 更新时间:2023-11-30 01:31:14 25 4
gpt4 key购买 nike

我有两个与两个按钮关联的 Activity

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

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"

android:supportsRtl="true"
android:theme="@style/AppTheme">





<activity

android:name=".Subactivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"
android:taskAffinity="com.example.start_cs.sub">
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

</activity>

<activity
android:label="@string/app_name"
android:name=".sub"

>
</activity>

<activity

android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" android:taskAffinity="com.example.start_cs.main"
>

<intent-filter>

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter>


</activity>


<activity
android:label="@string/app_name"
android:name=".main"

>
</activity>


</application>

主要 Activity 代码

package com.example.start_cs.myapp;




Button button;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
addListenerOnButton();
}

public void addListenerOnButton() {

final Context context = this;

button = (Button) findViewById(R.id.main_text_view);

button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

Intent intent = new Intent(context, main.class);
startActivity(intent);

}

});

}

布局代码

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/main"
android:background="@drawable/main"
android:layout_centerHorizontal="true"
android:id="@+id/main_text_view"


android:layout_marginTop="17dp"


/>

在这种情况下

子 Activity 按钮打开子

但是MainActivity按钮没有打开main

但是如果我把 MainActivity 放在 Subactivity 之上

子 Activity 按钮没有打开子

但是MainActivity按钮打开了main

最佳答案

好的,根据您对我评论的回复,我想我只能说您需要遵循有关如何为 Android 创建应用程序的教程。 Internet 上有很多优秀的教程。

你有两个 Activity ,所以你应该有两个布局文件。你只发了一个。

您还应该有两个源文件,每个 Activity 一个。你只发了一个。

您希望在代码中引用的布局中的每个 android 元素都需要一个 ID。您的代码引用 R.id.main_text_view ,但您的布局文件中没有这样的 ID。我很惊讶你的代码甚至可以编译。

但是,要回答您的具体问题,您需要的是:

1) <name> list 文件中的标签必须与每个 Activity 的 java 类源文件的名称相匹配。因此,根据您的 list 文件,您的 Activity 类文件似乎被称为“MainActivity”和“Subactivity”。但是,请参阅下面我对您的 onClickListener 代码的评论。

此外,您的 list 表明您的两个 Activity 都是“LAUNCHER” Activity 。您只需要为您希望能够从 Android 应用程序启动器启动的 Activity 添加该标签(即手机上安装的所有应用程序的列表)。似乎您只希望在您的主要 Activity 中使用此功能,但如果您愿意,可以指定多个。

2) 您的 Activity 是彼此的对偶(即它们听起来像是在做完全相同的事情——每个都有一个启动另一个的按钮)因此代码将非常相似。 MainActivity 的代码应如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
addListenerOnButton();
}

public void addListenerOnButton() {

final Context context = this;

button = (Button) findViewById(R.id.main_text_view); //<-- This tries to find a button in this activity (using the activity's layout file that was used in the call to setContentView() in onCreate(). However, the id you specify doesn't exist in your layout file. This should either not compile or return null.

//This is fine.
button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

Intent intent = new Intent(context, main.class); //<--"main.class" doesn't match either of the activity names declared in your manifest. It should match one of the names declared in the <name> tag of one of your <activity> tags.
startActivity(intent);

}

});

}

您的布局文件需要包含希望使用 findViewById() 查找的按钮的 ID .按如下方式修改您的布局文件(并为每个 Activity 创建一个 - 尽管从技术上讲,您可以为每个 Activity 引用相同的布局。但就目前而言,拥有单独的文件在概念上更容易)。

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/main"
android:background="@drawable/main"
android:layout_centerHorizontal="true"
android:id="@+id/main_text_view" <!-- Here is the line that identifies the button for your app. The format is "@+id/some_name", and is reference as "R.id.some_name" in your code. -->


android:layout_marginTop="17dp"


/>

现在您必须在您的子 Activity 代码中执行相同的操作,但您的 onClickListener 将调用主 Activity 而不是您的子 Activity 。因此,您的 MainActivity(启动您的子 Activity )的 onClickListener 代码如下所示:

button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

Intent intent = new Intent(context, Subactivity.class);
startActivity(intent);

}

});

在你的子 Activity 中这样(启动你的主 Activity )

button.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

Intent intent = new Intent(context, MainActivity.class);
startActivity(intent);

}

});

关于java - 多个 Intent 过滤器到多个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35731061/

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