[英]android - How to Logout from the application
我的應用程序有5個活動(A1,A2,A3,A4,A5)。 每個活動都有一個文本視圖和一個按鈕(B1,B2,B3,B4,B5)。 如果單擊該按鈕,則轉到下一個活動。 假設如果您單擊B1按鈕,則轉到A2活動,如果每個活動都具有一個菜單按鈕(注銷),則單擊該按鈕將退出應用程序。 但這是行不通的。 在這里,我為每個活動調用使用以下代碼。
為了清除堆棧
Intent intent = new Intent(act1.this,act2.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
在注銷按鈕單擊偵聽器中,我使用finish()
完成了當前活動。因為我們現在使用FLAG_ACTIVITY_CLEAR_TOP
清除了堆棧,所以堆棧僅包含當前活動,這就是為什么我僅完成當前活動。 但是,如果您單擊注銷按鈕,則僅完成當前活動。 它不會從應用程序退出。 這里使用該語句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);
}
}
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);
}
}
謝謝
您必須在要注銷的活動上設置setResult(int resultCode)
。 然后,在先前的Activity上,您必須在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);
}
假設您有四個活動(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:使用菜單onclick注銷按鈕
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
,它將再次重定向注銷Activity。 最后,您可以使用菜單按鈕從任何地方注銷。 沒有onBackPressed()
問題 。
或在清單清單中為活動使用Single實例,並處理每個活動onBackPressed()
。
您也可以通過啟動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;
}
}
每次打開下一個活動時,都必須使用finish()
來關閉所有活動。 現在,當用戶單擊注銷時,只有一個應用程序活動處於活動狀態,而當該活動關閉時,您的應用程序“退出”。
注意:在startActivity()
之前或之后調用finish()
startActivity()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.