我的应用程序有 5 项 Activity (A1、A2、A3、A4、A5)。每个 Activity 都有一个 TextView 和一个按钮(B1、B2、B3、B4、B5)。如果您单击该按钮,则进入下一个 Activity 。假设如果您单击 B1 按钮,那么它会转到 A2 Activity ,并且每个 Activity 还有一个菜单按钮(注销),如果您单击该按钮,那么它将从应用程序退出。但它不起作用。 在这里,我对每个 Activity 调用使用以下代码。
用于清除堆栈
Intent intent = new Intent(act1.this,act2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
在注销按钮单击监听器中,我使用 finish()
完成了当前 Activity 。因为我们使用 FLAG_ACTIVITY_CLEAR_TOP
清除了堆栈,现在堆栈仅包含当前 Activity ,这就是为什么我刚刚完成当前 Activity 。但是,如果您单击“注销”按钮,它只会完成当前 Activity 。它不会从应用程序中退出。这里堆栈被清除或不使用该语句FLAG_ACTIVITY_CLEAR_TOP
。以下是我的代码,任何人都可以帮助我。
Activity 一
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);
}
}
Activity 2
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);
}
}
谢谢
最佳答案
您必须在要注销的 Activity 上设置 setResult(int resultCode)
。然后,在之前的 Activity 中,您必须在 onActivityResult(int requestCode, int resultCode,Intent data)
中捕获此结果。您可以在这里完成您的 Activity 。再次捕获此处,您可以 setResult 来关闭前一种方法和相同的方法。
例如:
您在注销菜单上设置结果按如下:
finish(); //To finish your current acivity
setResult(R.id.common_menu_logout);
然后在之前的 Activity 中:
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);
}
关于android - 如何从应用程序注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826757/