【问题标题】:finish() is closing two activities instead onefinish() 正在关闭两个活动而不是一个
【发布时间】:2013-03-07 11:48:38
【问题描述】:

我制作了一个执行以下操作的应用:

活动 A --> 活动 B --> 活动 C

活动 A --> 活动 B2 --> 活动 C

当您关闭 B、B2 或 C 时,它会转到上一个活动。如果你关闭 A,它就会从应用程序中退出。

如果您从 B 到达 C,C 以一种方式工作,但如果您从 B2 到达,C 以一种不同的方式工作。

这在模拟器和我可以检查的所有设备中完美运行,但在两个带有 android 4.0.4 的 Xperia(型号 ARC 和 U)中出现了问题。

当他们从 B 到达 C 时,问题就出现了。当他们关闭 C 时,他们回到 A 而不是 B。如果他们从 B2 到达 C,当他们关闭时又回到 B2。

我无法理解。假设 C 在这两种情况下都必须以相同的方式工作。

另一个问题是:应用程序如何在除这两种设备之外的所有设备上完美运行?

有什么想法吗?我该如何解决这个问题?

编辑添加代码:

从 B 打开 C:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    // TODO Auto-generated method stub
    switch (position+1) {
    case 1:
        if(random == true){
            AnimalsBD.cmpt = Integer.parseInt(ABD.getNAct(Integer.toString(Aguila.ordre)))+1;
            }
        Intent a = new Intent ("com.android.JIA.Animals.1");
        startActivity(a);
    break;
    case 2:
        if(random == true){
            AnimalsBD.cmpt = Integer.parseInt(ABD.getNAct(Integer.toString(Anec.ordre)))+1;
            }
        Intent b = new Intent ("com.android.JIA.Animals.2");
        startActivity(b);
    break;

从 B2 打开 C:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {     
    // TODO Auto-generated method stub

    mpCorrecte = MediaPlayer.create(this, R.raw.correcte);
    mpIncorrecte = MediaPlayer.create(this, R.raw.incorrecte);

    if(start){
    switch (position+1) {
    case 1:
        if(numSo==1){
            start = false;
            mpCorrecte.start();
            mpCorrecte.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    Intent a = new Intent ("com.android.JIA.Animals.1");
                    startActivity(a);}                  
            });
        }else{
            mpIncorrecte.start();
        }
    break;
    case 2:
        if(numSo==2){
            start = false;
            mpCorrecte.start();
            mpCorrecte.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    Intent a = new Intent ("com.android.JIA.Animals.2");
                    startActivity(a);}                  
            });
        }else{
            mpIncorrecte.start();
        }
    break;

在这两种情况下,我都会从网格视图中打开最终活动。所有最后的活动都是一样的。

谢谢。

【问题讨论】:

  • 你能发布你的代码如何调用不同的活动
  • 我已经用我的代码编辑了条目。
  • 您能否为您测试的设备提供准确的 Android 软件版本?我可以尝试在这些设备上运行类似的示例。
  • 两个设备的android版本都是4.0.4,不过不用担心,问题已经解决了。还是谢谢你。

标签: android android-activity activity-finish


【解决方案1】:

我终于可以解决问题了。

在 OnDestroy() 方法中丢失了一个 finish(),如下所示:

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    ABD.erase();
            finish();
}   

感谢您的帮助。

现在的问题是:为什么除了这两个模型之外,这个finish() 在任何设备上都没有做任何事情?

未解之谜...

【讨论】:

    【解决方案2】:

    使用此代码打开新活动。

            Intent i = new Intent(CurrentActivity.this,
                OpeningActivity.class);
        startActivity(i);
    

    替换CurrentActivityOpeningActivity

    应用程序如何在除这两种设备之外的所有设备上完美运行?
    您必须通过选择不同类型的手机(例如不同的平台、不同的屏幕尺寸和不同的规格)来手动检查。

    【讨论】:

    • 我和朋友查过,这些索尼 Xperia 仍然存在问题。
    • 您必须通过选择不同类型的手机手动检查它... 可以模拟具有特定android版本的特定设备吗?我的意思是,我可以用 android 4.0.4 模拟 Sony Xperia Arc 吗?
    • @Nirali 对可能的解决方案有任何想法吗?
    • 模拟器有自己的缺点
    • 是的,我已经改了,但问题依然存在。同样的设备也有同样的问题。有什么建议吗?
    猜你喜欢
    • 2012-11-23
    • 2013-10-27
    • 1970-01-01
    • 2011-08-25
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多