2011-07-26 9 views
2

내 애플리케이션에는 5 가지 활동 (A1, A2, A3, A4, A5)이 있습니다. 각 활동에는 하나의 텍스트보기와 하나의 단추 (B1, B2, B3, B4, B5)가 있습니다. 해당 버튼을 클릭하면 다음 활동으로 이동합니다. B1 버튼을 클릭하면 A2 활동으로 이동하고 각 활동에는 하나의 메뉴 버튼 (로그 아웃)이 있습니다. 버튼을 클릭하면 응용 프로그램에서 빠져 나옵니다. 하지만 작동하지 않습니다. 여기 나는 모든 활동 호출에 대해 다음 코드를 사용하고 있습니다. 분명히 들어android - 애플리케이션에서 로그 아웃하는 방법

스택은 로그 아웃 버튼 클릭 리스너에서

Intent intent = new Intent(act1.this,act2.class); 

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    startActivity(intent); 

, 난 그냥 완료 이유 FLAG_ACTIVITY_CLEAR_TOP를 사용하여 스택이 지금 스택은 그게 전부 현재 활동을 포함 우리가 분명 .because finish()을 사용하여 현재 활동 완료 현재 활동. 그러나 로그 아웃 버튼을 클릭하면 현재의 행동이 끝납니다. 응용 프로그램을 종료하지 않습니다. 여기서 스택은 지워졌는지 여부는 해당 명세서 FLAG_ACTIVITY_CLEAR_TOP입니다. 다음은 내 코드가 아무도 나를 도울 수 있습니다.

Actvity 하나

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); 
    }     
} 

감사

당신이 열 때마다 finish()와 당신의 활동 (모두) 을 닫아야 할

답변

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); 
} 
+0

아직도 물어볼 수없는 경우. –

+0

여기 R.id.common_menu_logout이란 무엇입니까? – naresh

+1

내 resultCode입니다. 정수를 상수로 사용할 수 있습니다. "setResult (100)"을 사용하고 onActivityResult에서 "case 100 :"으로 시도하십시오. –

-1

다음. 이제 사용자가 로그 아웃하면 응용 프로그램 활동 중 하나만 활성화되고이 활동이 닫히면 응용 프로그램이 종료됩니다.

참고 :finish()startActivity()으로 전화했는지 여부는 중요하지 않습니다.

+0

샘플 코드 – naresh

+0

모든 'startActivity (intent)'앞에'finish()'를 사용했습니다. 작동하는지 알려주세요. –

+0

이것이 다시 버튼 기능을 해칠 것이므로 일을하는 좋은 방법이 아니라고 생각하십니까? 'onActivityResult()'를 사용하고 로그 아웃 코드가 다시'finish()'등으로 사용되면 결과 코드를 확인하는 것이 훨씬 낫습니다. 로그 아웃 요청은 로그 아웃 된 원점의 각 'Activity'를 통해 거품이납니다. '줄곧 돌아왔다. Belaji Khadake가 제안한 것과 같습니다. – wired00

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 단계에서 변수를 선언 onclick을 로그 아웃 버튼 메뉴를

Intent homescreen=new Intent(this,DashBoardActivity.class); 
SearchHelper.logout=1; 
homescreen.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(homescreen); 
this.finish();   

를 사용 후 대시 활동에 리디렉션 인해 SearchHelper.Logout==1에 다시 로그 아웃 리디렉션 활동.마지막으로 메뉴 버튼을 사용하여 어디서나 로그 아웃 할 수 있습니다. onBackPressed()의 문제 없음. 또는 onBackPressed()을 처리하십시오.

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; 
    } 
} 
관련 문제