我的应用程序有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);
Run Code Online (Sandbox Code Playgroud)
在Logout按钮中单击监听器,我使用.完成当前活动.finish()因为我们很清楚堆栈使用FLAG_ACTIVITY_CLEAR_TOPnow stack只包含当前活动,这就是我刚刚完成当前活动的原因.但是如果你单击Logout按钮,它只会完成当前的动作.它不会退出应用程序.这里使用该语句清除或不清除堆栈FLAG_ACTIVITY_CLEAR_TOP.以下是我的代码可以任何人帮助我.
行动一
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
您必须设置setResult(int resultCode)要注销的活动.然后在之前的Activity上你必须捕获这个结果onActivityResult(int requestCode, int resultCode,Intent data).在这里,您可以完成您的活动.再次捕获这里你可以setResult关闭前一个和相同的方法.例:
您在退出菜单上设置结果按:
finish(); //To finish your current acivity
setResult(R.id.common_menu_logout);
Run Code Online (Sandbox Code Playgroud)
然后在之前的活动:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28200 次 |
| 最近记录: |