点击后退按钮,但不杀死活动,让它在Back Stack(Android)中

时间:2012-01-08 11:37:12

标签: android android-activity android-manifest android-view

我有3项活动A,B和C.

我在按钮点击时动态地膨胀活动B,用户可以添加他喜欢的任意数量的视图。

操作如下:

用户看到“活动A”首先输入他的详细信息并点击保存按钮,我将他带到“活动B”,在那里他多次添加某些字段,当他再次点击保存时,我将他带到“活动C” ”。

现在当我在A并且去B并添加一些视图并在TextViews中输入文本然后点击保存然后转到C.从C回来如果我回击我看到B完好无损以及所有膨胀的视图和输入的文本很明显,因为它保存在后台堆栈中,但是如果我通过回击然后返回B从B转到A,则所有视图都会消失,因为它已从后栈中删除。

我想知道是否可以在BackStack中只保留一个B实例,而在用户点击时根本不杀死它? 我已经覆盖了后退键,但无效,因为活动被杀死了,有些人建议我应该将整个视图和数据从它保存到Parcelable ArrayList并在onCreate中重新生成它们但是这对我来说看起来不太可行无论如何我们可以将它保存在BackStack中。

我在Android开发人员http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html中看到了这个指南,其中说明了这些活动属性

android:taskAffinity
android:launchMode
android:allowTaskReparenting
android:clearTaskOnLaunch
android:alwaysRetainTaskState
android:finishOnTaskLaunch
android:singleTask
android:singleInstance

但我不知道如何使用它们。

有人试过这个吗?如果是这样,请帮我把各个部分放在一起。

2 个答案:

答案 0 :(得分:1)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

        switch(keyCode)
        {
        case KeyEvent.KEYCODE_BACK:
            //bring back the previous activity do your logic here           
            return false;
        }
    return super.onKeyDown(keyCode, event);
}

您可以使用此功能,在不应关闭活动时返回false。使用FLAG_ACTIVITY_REORDER_TO_FRONT启动上一个活动

答案 1 :(得分:1)

是的,我同意Nandeesh的观点。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
            switch(keyCode)
            {
            case KeyEvent.KEYCODE_BACK:
                //bring back the previous activity do your logic here           
                return false; //means you don't want to remove the activity from stack 
            }
        return super.onKeyDown(keyCode, event);  // means u want to remove the last activity from Activity stack.
    }

    so question  is that how u can go to other activity without remove it from stack, 
    you can use  :
                Intent myIntent = new Intent(CurrentClass.this, JumptoActivity.class);
                 startActivity(myIntent);*

example: at the switch case u can use this

if(KeyEvent.KEYCODE_BACK)
{
                Intent myIntent = new Intent(CurrentClass.this, NextActivity.class);
                 startActivity(myIntent);
                return false;
}
else
    return true;       //if you not write this then your  menu and other think will be affected.

谢谢,我认为这一点信息对你有帮助。