在Android中,每个屏幕应该是自己的Activity还是布局?

好的我正在设计一个应用程序,它具有62个内容屏幕的非常简单的布局,可通过27个菜单屏幕访问。 这共有89项活动。

目前,每个内容屏幕都是一个只调用XML布局(一些文本,按钮和图像)的Activity,并添加了一些onClickfunction。

每个菜单屏幕都是一个ListActivity,按下列表中的每个项目将打开该项目的活动(无论是另一个菜单屏幕还是内容屏幕)。

目前我正在使用3个菜单屏幕和一个内容屏幕进行测试。 很好地滚动它们所有,但是我担心当我完成应用程序时它会有太多的活动并使应用程序变得缓慢和顽固。 在应用程序的平均使用中,我想用户将使用不超过10个活动,但我不确定Android是否会预期创建其他未使用的活动或什么。

因此,实现这一目标的另一种方法是只有几个活动(MainMenu可能为1,subMenu为1,ContentScreen为1)可以确定要显示的布局。 但是我觉得这意味着每个Activity都有很多工作要做,而且我失去了按下Back按钮的function,让用户通过菜单层次结构备份(并在每个屏幕上编写一个替换Back按钮涉及onClick的大量案例涉及每一个可能的布局,所有89个!)。

这个应用程序最好的方法是什么?

很感谢任何forms的帮助

除非菜单活动和内容活动之间的布局和行为有很大不同,否则我会选择“只是一些活动方法”。

后退按钮不会中断,Android会跟踪您的待办事项。

你真的需要89种不同的布局吗? 如果它主要是内容之间的内容,则将内容存储在数据库或文件中或/res/ ,重用布局并在运行时填充布局的内容区域。


更新:

在onCreate()中使用适当的内容填充布局,每个内容页面有1个活动是不是最简单?

取决于你的onCreate()代码有多么不同。 如果你的onCreate()将成为一个包含62种截然不同的case条款的巨型switch ,那么最好选择单独的小型活动,而不是大型活动。 如果您可以概括onCreate()代码,并将其保持在下面,比如说100行和10个分支语句,那就更好了。

举个例子,前段时间我正在构建一个包含考试题集的简单应用程序,并将它们随机呈现给用户。 每个问题都有问题文本,插图和2-4个答案选择。 大约有500个不同的问题。 这是从数据库加载问题并更新布局的代码。 请注意,它处理可变数量的答案,以及某些问题没有插图的可能性。

 public void loadQuestion(int id) { // Columns in questions table: // CREATE TABLE questions ( // id integer, // q text, // a1 text, // a2 text, // a3 text, // a4 text, // a5 text, // correct integer, // img blob // ); Cursor c = mDatabase.rawQuery("SELECT * FROM questions where id=" + id, null); c.moveToFirst(); TextView text = (TextView) findViewById(R.id.text); text.setText(c.getString(1)); RadioGroup g = (RadioGroup) findViewById(R.id.answers); g.clearCheck(); // Load answers! int correct = c.getInt(7); int[] buttons = new int[] {R.id.a1, R.id.a2, R.id.a3, R.id.a4, R.id.a5}; for (int i=0; i < 5; i++) { String answerText = c.getString(i + 2); RadioButton rb = (RadioButton) findViewById(buttons[i]); if (answerText != null && answerText.length() > 0) { rb.setText(answerText); rb.setTag(i + 1 == correct ? "correct" : null); rb.setVisibility(RadioButton.VISIBLE); } else { rb.setVisibility(RadioButton.GONE); } } byte[] encoded = c.getBlob(8); ImageView iv = (ImageView) findViewById(R.id.image); if (encoded != null && encoded.length > 0) { iv.setVisibility(ImageView.VISIBLE); iv.setImageBitmap(bytesToBitmap(encoded)); } else { iv.setVisibility(ImageView.GONE); } } 

你是什​​么意思:后退按钮不会中断,Android会跟踪你的待办事项?

当用户跨越应用程序从活动移动到活动时,Android系统会保留用户访问过的活动的线性导航历史记录。 这是活动堆栈,也称为后堆栈。 通常,当用户启动新活动时,会将其添加到活动堆栈中,以便按BACK显示堆栈上的上一个活动。

(来自活动和任务设计指南 )

我认为仅仅因为宣布的活动数量会变慢。 但是,您应该跨活动重用一些布局: http : //developer.android.com/resources/articles/layout-tricks-merge.html

您可以重用您的布局,并可以使用startAcitity和startActivityForResult方法来管理活动的有效性。