【发布时间】:2020-08-18 21:37:58
【问题描述】:
这是一个更基本的问题,因为我对 Android Studio 不太熟悉,而且我不确定在开发人员指南或 SO 上找到它的正确短语是什么。
我的问题:
如何处理 3 个活动(A、B、C),从 A 开始,到 B,然后在 B 和 C 之间进行不断的交换?
当使用经典的 Intent 调用方法时,从 A 到 B 一切都很好,但进一步让我到 A 而不是 C。似乎有一点延迟和白屏,就像应用程序试图打开活动 C但失败了。 我正在通过所有这些活动传递一个严肃的对象。对象在 A 中创建和初始化。B 显示对象中的信息并让用户更改其中的一些信息。 C 让用户在我的对象中改变一个特殊的地方。换句话说,这个对象作为一个持久的地方在 B 和 C 之间的交换中存储信息。
A 中的 Intent 调用(MainActivity):
Intent intent = new Intent(this, GameActivity.class);
intent.putExtra(GAME_MANAGER,gm);
startActivity(intent);
获取B(GameActivity)中的对象:
gm = (GameManager) getIntent().getSerializableExtra(GAME_MANAGER);
B 中的 Intent 调用(GameActivity):
Intent intent = new Intent(this, InteractionActivity.class);
intent.putExtra(GAME_MANAGER, gm);
startActivity(intent);
在C(InteractionActivity)中获取对象:
gm = (GameManager) getIntent().getSerializableExtra("GAME_MANAGER");
C 中的 Intent 调用(InteractionActivity):
Intent intent = new Intent(this, GameActivity.class);
intent.putExtra(GAME_MANAGER,gm);
startActivity(intent);
我的清单:
清单 xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.chronoplatoon">
application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
activity android:name=".InteractionActivity"></activity>
activity android:name=".GameActivity" ></activity>
activity android:name=".MainActivity">
intent-filter>
action android:name="android.intent.action.MAIN" />
category android:name="android.intent.category.LAUNCHER" />
/intent-filter>
/activity>
/application>
/清单> (我在显示时遇到了一些问题。对于丑陋的格式和每行开头删除的“
如果有人能解释一下如何正确处理 Android Studio 中复杂的活动结构,那就太好了! 如果所有这些代码在理论上都有效,请回答,以便我可以处理它并在其他地方找到错误。 正如 Otid0 所指出的,在活动 C 中使用 finish() 方法听起来是一个不错的方法。但是我需要一些其他的方法来让所有活动在同一个对象上工作,就像某种全局持久内存一样。对我来说,Android Studio 中的活动似乎更像是多个独立工作的 main() 函数。如果这是错误的,请教我更好。 非常感谢!
【问题讨论】:
-
与其在 C 中创建另一个 Intent 为什么不完成() C 那么它应该立即在 B 中转向
-
@Otid0:我需要更改 C 中序列化对象中的数据。为了利用这些更改,我使用相同的对象创建了一个新活动 B。我认为如果有某种全局内存可以存储我的对象并且可以通过多个活动持久存在,我的问题就可以解决。
-
你可以创建一个 Singleton 类,在 A 中实例化它,然后在 B 或 C 中调用它。