finish()正在关闭两个活动,而不是一个

时间:2013-03-07 11:48:39

标签: android android-activity activity-finish

我做了一个应用程序执行以下操作:

活动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;

在这两种情况下,我都是从gridview打开最后一个活动。所有最后的活动都是平等的。

谢谢。

2 个答案:

答案 0 :(得分:1)

最后,我可以解决问题。

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

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

感谢您的帮助。

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

未解之谜......

答案 1 :(得分:0)

使用此代码打开新活动。

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

替换CurrentActivityOpeningActivity

除了这两个设备外,应用程序如何在所有设备中完美运行?
你必须通过选择不同类型的手机,如不同的平台,不同的屏幕尺寸和不同的规格来手动检查。