2013-01-05 173 views
4

我试图清除活动历史堆栈,当用户单击logout button甚至尝试使用IntentFlag Intent.FLAG_ACTIVITY_NO_HISTORY但没有运气。看看下面提到的我的场景。清除活动历史堆栈

1)登录屏幕(呼叫完成)

2)第一屏幕(未调用完成)

3)第二个屏幕(未调用完成)

4)第三屏幕(未主叫终)

5)注销屏幕(这将打开登录界面,并获得完成)

要使用下面的代码实现我的目标男,

登录屏幕

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent=new Intent(MainActivity.this,FirstActivity.class); 
       startActivity(intent); 
       finish(); 

      } 
     }); 

登陆回到事件

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 

     if (getIntent().getBooleanExtra("EXIT", false)) { 
      this.finish(); 
     }else{ 
      this.finish(); 
     } 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

首先屏幕

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent=new Intent(FirstActivity.this,SecondActivity.class); 
       startActivity(intent); 

      } 
     }); 

小号屏幕的Econd

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent=new Intent(SecondActivity.this,ThirdActivity.class); 
       startActivity(intent); 

      } 
     }); 

三屏

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent=new Intent(ThirdActivity.this,MainActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intent.putExtra("EXIT", true); 
       startActivity(intent); 
       finish(); 

      } 
     }); 

问题是,当我点击登出,它进入登录活动,当我点击后退按钮它进入第二个活动。

为什么它不整理活动,也是为什么它去second activity,如果它保持堆栈,那么它应该去first activity,而不是第二个,当我点击从login screen回来,不知道我错过了什么样的事情。

更新

一切工作正常,如果我删除finish()同时呼吁从登录屏幕的意图,但我不想保持栈登录屏幕。

您的建议值得商榷。

+0

尝试使用Android:nohistory =“真”在你想要的活动......,并尝试完成,如果你不会再重新使用的屏幕。 – itsrajesh4uguys

+1

您是否试过intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)??? – itsrajesh4uguys

+0

@Rajesh是的,但没有运气 – RobinHood

回答

4

你可以做一个把戏这个问题。我已经使用它,并与我很好地工作。

在您的ThirdActivity onclick中写下代码行

btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent=new Intent(ThirdActivity.this,FirstActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      intent.putExtra("GO", false); 
      startActivity(intent); 
      finish(); 

     } 
    }); 

写下面的代码你FirstActivity的OnCreate中类中后:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     // Getting the Value of GO 
     GO = getIntent().getExtras().getBoolean("GO"); 

      if(GO){ 
     setContentView(R.layout.form_data); 
      ... 
      // Here your Code for this Activity 
      ... 
      }else{ 
      Intent intent=new Intent(FirstActivity.this,MainActivity.class); 
      startActivity(intent); 
      finish(); 
      } 
} 

也把GO的额外价值是真实而来自MainActivity调用FirstActivity如下

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent intent=new Intent(MainActivity.this,FirstActivity.class); 
       intent.putExtra("GO", true); 
       startActivity(intent); 
       finish(); 

      } 
     }); 

希望它能解决你的问题。

+0

感谢它也是一个窍门,但我做了一些简单的方法!我回答了检查。 – RobinHood

3

将意图平面intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);更改为intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);并尝试。我希望它能起作用并帮助你。

只有当您正在调用的Activity位于BackStack中时,Clear Top才会有效。由于LoginActivity不在BackStack中,因此不会清除活动。

为012A添加android:noHistory="true"并尝试登录活动。我在看到您更新的问题后提供此更新。

+0

不工作已经尝试过 – RobinHood

+0

@RobinHood检查我已更新回答 – TNR

+0

已尝试,但无法正常工作。 – RobinHood

0

Third screen

btn.setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      Intent intent=new Intent(ThirdActivity.this,MainActivity.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_TASK_ON_HOME);   
      intent.putExtra("EXIT", true); 
      startActivity(intent); 
      finish(); 

     } 
    }); 
+0

没有运气@Vikalp Patel – RobinHood

+0

@RobinHood你有没有使用过'intent.addFlags(Intent.FLAG_ACTIVITY_TASK_ON_HOME);'?.你的代码听起来很完美,我不知道为什么它不起作用。只要尝试清理项目,如果相同的问题仍然存在。 –

+0

我做了一切还没有工作,可以给我你的答案的逻辑推理? – RobinHood

-1

最后我得到了一个解决方案,无论如何!它实现了我的目标,将活动的静态对象放在自己的活动中,并且为所有活动注销object.finish(),它工作正常。

下面是我的绝招来实现我的目标

在第一项活动声明public static FirstActivity first;和内onCreate assing我做了别人的活动太first=this;同样的事情,而注销,不喜欢下面。

btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(ThirdActivity.this, 
         MainActivity.class); 
       FirstActivity.first.finish(); 
       SecondActivity.second.finish(); 

       startActivity(intent); 
       finish(); 

      } 
     });