好的我正在设计一个具有62个内容屏幕的非常简单的布局的应用程序,可通过27个菜单屏幕访问。总共有89项活动。
目前,每个内容屏幕都是一个只调用XML布局(一些文本,按钮和图像)的Activity,并添加了一些onClick功能。
每个菜单屏幕都是ListActivity,按下列表中的每个项目将打开该项目的活动(无论是另一个菜单屏幕还是内容屏幕)。
目前我正在使用3个菜单屏幕和内容屏幕进行测试。很好地滚动它们所有,但我担心当我完成应用程序时,它将有太多的活动,并使应用程序缓慢和顽固。在应用程序的平均使用中,我想用户将使用不超过10个活动,但我不确定Android是否会预期创建其他未使用的活动或什么。
实现这一目标的另一种方法是只有几个活动(MainMenu可能为1,subMenu为1,ContentScreen为1)可以确定要显示的布局。但是我觉得这意味着每个Activity都有很多工作要做,而且我失去了按下Back按钮的功能,让用户通过菜单层次结构备份(并将替换后退按钮编码到每个屏幕上)涉及onClick的大量案例涉及每一个可能的布局,所有89个!)。
这个应用程序的最佳方式是什么?
非常感谢任何帮助
答案 0 :(得分:2)
除非菜单活动和内容活动之间的布局和行为有很大不同,否则我会选择“只是一些活动方法”。
后退按钮不会中断,Android会跟踪您的待办事项。
你真的需要89种不同的布局吗?如果它主要包含它们之间的不同内容,则将内容存储在数据库或文件中或/res/
中,重用布局并在运行时填充布局的内容区域。
更新
onCreate()在每个内容页面中有1个活动是否最简单?onCreate()使用适当的内容填充布局?
取决于您的onCreate()
代码的不同之处。如果您的onCreate()
将成为一个巨大的switch
,其中包含62个截然不同的case
条款,那么最好选择单独的小型活动,而不是大型活动。如果您可以概括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显示 堆栈上的上一个活动。
答案 1 :(得分:0)
我认为仅仅因为宣布的活动数量会变慢。 但是,您应该跨活动重用一些布局:http://developer.android.com/resources/articles/layout-tricks-merge.html
答案 2 :(得分:0)
您可以重用您的布局,并可以使用startAcitity和startActivityForResult方法来管理活动的有效性。