我有一个活动代表一个用于两种变体的屏幕。唯一的区别是,在一种情况下,它用于处理另一种颜色的数字。这是它的声明方式:
> public class MainScreen extends Activity {
/** Called when the activity is first created. */
private Integer activityCode;
private static final int ACTIVITY_NUMBER = 0;
private static final int ACTIVITY_COLOR = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityCode = savedInstanceState != null ? savedInstanceState
.getInt("Task") : null;
if (activityCode == null) {
Bundle extras = getIntent().getExtras();
activityCode = extras != null ? extras.getInt("Task") : null;
}
do stuff depending on which activity is actually chosen
}
这就是它的名称
来自其自身
> @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
Intent i;
switch (item.getItemId()) {
case OTHER_PAGE_ID:
i = new Intent(this, MainScreen.class);
if (activityCode == ACTIVITY_NUMBER) {
i.putExtra("Task", ACTIVITY_COLOR);
startActivityForResult(i, ACTIVITY_COLOR);
finish();
} else {
i.putExtra("Task", ACTIVITY_NUMBER);
startActivityForResult(i, ACTIVITY_NUMBER);
finish();
}
return true;
....
}
这种重用同一类的方式实际上好吗?我对非常相似的屏幕使用相同的类,并希望根据用户选择来回切换。
但是每当在NUMBERS< - >之间选择不同的屏幕时,班级就会调用自己。 COLOR。
问题是,当我从NUMBERS转到COLORS然后按后退箭头时,应用程序退出。但是,当我从NUMBERS转到另一个屏幕并按回来时,它会再次回到NUMBERS。
为什么在类调用自身的情况下不会回到工作地点?我认为它只是将每个调用放在堆栈上并返回到它。
这不仅仅是一个迷你递归,其中NUMBER将自己称为COLOR,并在完成时再次显示?
我希望我能说清楚。谢谢你的帮助
答案 0 :(得分:1)
这让我头晕目眩。为什么不使用两个Activities
?如果是代码重用,只需要一个包含所有公共代码的基类,然后为Color和Number类扩展它:
public class Base extends Activity {
// common code here
}
public class Colour extends Base {
// colour specific code here
}
public class Number extends Base {
// number specific code here
}