屏幕的活动会调用自己的类似用法 - 但退回应用程序

时间:2011-04-15 10:26:05

标签: android recursion android-activity

我有一个活动代表一个用于两种变体的屏幕。唯一的区别是,在一种情况下,它用于处理另一种颜色的数字。这是它的声明方式:

> 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,并在完成时再次显示?

我希望我能说清楚。谢谢你的帮助

1 个答案:

答案 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
}