在Android应该每个屏幕都是自己的活动或布局?

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

目前,我有每个内容屏幕是一个只调用XML布局(一些文本,button和图像),并添加一些onClickfunction的活动。

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

目前我正在使用3个菜单屏幕和一个内容屏幕进行testing。 滚动浏览它们都很好,但是我担心当我完成应用程序时,它会有太多的活动,并使应用程序变得缓慢和slu slu。 在平均使用的应用程序,我想用户将使用不超过10个活动,但我不知道如果Android会预期创build其他未使用的活动或什么。

所以实现这个的另一种方法是只有一些活动(对于MainMenu来说可能是1,对于subMenu来说可能是1,对于ContentScreen来说可能是1),这样才能确定要显示哪个布局。 但是我觉得这意味着每个活动都有更多的工作要做,而且我也失去了按下“返回”button的function,让用户通过菜单层次结构进行备份(并且在每个屏幕上编码一个replace后退button)涉及一个涉及每一个可能的布局,其中所有89个onClick的大规模案例!)。

什么是最好的方式去关于这个应用程序?

很感谢任何forms的帮助

Solutions Collecting From Web of "在Android应该每个屏幕都是自己的活动或布局?"

除非布局和行为在菜单活动和内容活动之间存在显着的差异,否则我会采取“仅仅几个活动方法”。

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

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


更新:

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

取决于你的onCreate()代码将会有多不同。 如果你的onCreate()将会是一个巨大的switch其中有62个完全不同的子句,那么最好是单独的小型活动,而不是一个巨大的活动。 如果你可以推广onCreate()代码,并保留下来,比如说100行和10个分支语句,那么这个代码就可以了。

举一个例子,前一段时间,我正在构build一个简单的应用程序,它包含一系列的考题,随机地呈现给用户。 每个问题都有问题文本,插图和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); } } 

你是什​​么意思:后退button不会中断,Android跟踪你的积压?

随着用户从应用移动到应用,Android系统会保持用户访问过的活动的线性导航历史logging。 这是活动堆栈,也被称为后退堆栈。 一般来说,当用户开始一个新的活动,它被添加到活动堆栈,以便按下BACK显示堆栈上的前一个活动。

(来自活动和任务devise指南 )

我不认为只是因为宣布的活动数量会变慢。 不过,您应该可以在活动中重新使用一些布局: http : //developer.android.com/resources/articles/layout-tricks-merge.html

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