我的申请有5项活动(A1,A2,A3,A4,A5)。每个活动都有一个文本视图和一个按钮(B1,B2,B3,B4,B5)。如果单击该按钮,则转到下一个活动。假设你单击B1按钮然后它进入A2活动,并且每个活动还有一个菜单按钮(Logout),如果你单击该按钮,它将退出应用程序。但它没有用。 在这里,我为每个活动调用使用以下代码。
清除堆栈
Intent intent = new Intent(act1.this,act2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
在Logout按钮中单击监听器,我使用finish()
完成了当前活动。因为我们很清楚堆栈使用FLAG_ACTIVITY_CLEAR_TOP
现在堆栈包含当前活动,这就是为什么我刚刚完成当前活动。但是如果你单击Logout按钮,它只会完成当前的动作。它不会退出应用程序。这里使用该语句FLAG_ACTIVITY_CLEAR_TOP
清除或不清除堆栈。以下是我的代码可以任何人帮助我。
Actvity one
public class logout extends Activity
{
TextView tv;
Button next;
public static final int logout_menu = Menu.FIRST+1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.text);
tv.setText("activity1");
Button next = (Button) findViewById(R.id.button);
next.setOnClickListener(nextListener);
}
private OnClickListener nextListener = new OnClickListener()
{
public void onClick(View v)
{
try
{
Intent intent = new Intent(logout.this,act2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
catch(Exception ex2)
{
System.out.println("Not able to launch Registration Screen"+ex2.toString());
}
}
};
public boolean onCreateOptionsMenu(Menu menu){
// TODO Auto-generated method stub
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, logout_menu, 0, "Logout");
return result;
}
public boolean onOptionsItemSelected(MenuItem item){
// TODO Auto-generated method stub
switch (item.getItemId()) {
case logout_menu:finish();
break;
}
return super.onOptionsItemSelected(item);
}
}
Actvity2
public class act2 extends Activity
{
TextView tv;
Button next;
public static final int logout_menu = Menu.FIRST+1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.text);
tv.setText("activity2");
Button next = (Button) findViewById(R.id.button);
next.setOnClickListener(nextListener);
}
private OnClickListener nextListener = new OnClickListener()
{
public void onClick(View v)
{
try
{
Intent intent = new Intent(act2.this,act3.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
catch(Exception ex2)
{
System.out.println("Not able to launch Registration Screen"+ex2.toString());
}
}
};
public boolean onCreateOptionsMenu(Menu menu){
// TODO Auto-generated method stub
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, logout_menu, 0, "Logout");
return result;
}
public boolean onOptionsItemSelected(MenuItem item){
// TODO Auto-generated method stub
switch (item.getItemId()) {
case logout_menu:finish();
break;
}
return super.onOptionsItemSelected(item);
}
}
感谢
答案 0 :(得分:5)
您必须在要注销的活动上设置setResult(int resultCode)
。然后在上一个活动中,您必须在onActivityResult(int requestCode, int resultCode,Intent data)
中捕获此结果。在这里,您可以完成您的活动。再次捕获这里你可以setResult关闭前一个和相同的方法。
例:
您可以在退出菜单上设置结果,按:
finish(); //To finish your current acivity
setResult(R.id.common_menu_logout);
然后是之前的活动:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode) {
case R.id.common_menu_logout:
setResult(R.id.common_menu_logout);
closeActivity(); // to close this activity
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
答案 1 :(得分:1)
假设您有四项活动(A,B,C,D),并且您希望使用“菜单”按钮在应用中开发退出功能。
步骤1:首先在
中声明变量SearchHelper.logout=0;//in SearchHelper Class
//OnCreate of Activity--DashBoard
if(SearchHelper.logout==1)
{
Intent loginscreen=new Intent(this,LoginActivity.class);
loginscreen.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Toast.makeText(DashBoardActivity.this, "WELCOME TO LOGINSCREEN", Toast.LENGTH_SHORT).show();
startActivity(loginscreen);
this.finish();
SearchHelper.logout=0;
}
步骤2:使用菜单
点击退出按钮Intent homescreen=new Intent(this,DashBoardActivity.class);
SearchHelper.logout=1;
homescreen.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homescreen);
this.finish();
它将重定向到DashBoard Activity,然后由于SearchHelper.Logout==1
它将再次重定向注销活动。最后,您可以使用菜单按钮从任何地方注销。 没有问题onBackPressed()
。
或者在清单For Activity中使用Single实例并处理每个Activity onBackPressed()
。
答案 2 :(得分:0)
您也可以通过启动LoginActivity来注销。示例如下所示,用于选择菜单中的“注销”按钮。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_logout:
LoginActivity.username.setText("");
LoginActivity.password.setText("");
Intent logout = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(logout);
return true;
}
}
答案 3 :(得分:-1)
当你打开下一个活动时,你必须用finish()
关闭你的活动(所有这些)每次。现在,当用户点击注销时,只有一个应用程序活动处于活动状态,当关闭时,您的应用程序将“退出”。
注意:无论您是在finish()
之前还是之后致电startActivity()
,都无关紧要。