2016-09-26 7 views
0

원하는 것은 백 스택이 비어있는 경우에만 응용 프로그램을 종료하는 것입니다.다시 버튼을 두 번 눌러 몇 가지 조건으로 앱을 종료하십시오.

내 응용 프로그램의 한 섹션에는 그림이 클릭되면 전체 화면 이미지를 보여주는 조각이 열리는 갤러리가 있습니다. 이 전체 화면 이미지에서 뒤로 버튼을 누르면 갤러리 조각으로 돌아가고 싶습니다. 조각을 다시 스택에 추가하여이 작업을 수행했습니다.

하지만 응용 프로그램의 다른 부분에서 뒤로 버튼을 누르면 "다시 끝내려면 뒤로를 클릭하십시오."라고 표시하고 싶습니다. 그리고 다시 버튼을 누르면 앱이 닫힙니다. 어떻게해야합니까?

이것은 내가 지금까지 무엇을했는지 있습니다 :

boolean doubleBackToExitPressedOnce = false; 
@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0){ 
     getFragmentManager().popBackStack(); 
    } else { 

     if (doubleBackToExitPressedOnce) { 
      super.onBackPressed(); 
      return; 
     } 

     this.doubleBackToExitPressedOnce = true; 
     commonTasks.ShowStringMessage("Please click BACK again to exit"); 

     new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       doubleBackToExitPressedOnce=false; 
      } 
     }, 2000); 

     //super.onBackPressed(); 
    } 
} 

물론, 그것은 작동하지 않았다.

당신은에서 getSupportFragmentManager를 사용하여 시도 할 수 있습니다
+0

getFragmentManager() 또는 getSupportFragmentManager()를 사용하여 백 스택에 조각을 추가하는 경우 – Nitesh

+0

@Nitesh : getFragmentManager()를 (를) 확인하십시오. 도울 수 있니? –

+0

코드가 제게 잘 보이고 있습니다 ... 뒤로 버튼을 누르면 무슨 일이 일어 났는지 알려주실 수 있습니까? – Nitesh

답변

0

() 그것은

boolean doubleBackToExitPressedOnce = false; 
@Override 
public void onBackPressed() { 
if (getSupportFragmentManager().getFragments().size() > 0){ 
    getSupportFragmentManager().popBackStack(); 
} else { 

    if (doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
     return; 
    } 

    this.doubleBackToExitPressedOnce = true; 
    commonTasks.ShowStringMessage("Please click BACK again to exit"); 

    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      doubleBackToExitPressedOnce=false; 
     } 
    }, 2000); 

    //super.onBackPressed(); 
} 

}

을 다음과 같은 모든 조각이 포함되어 있고 그 크기 확인을 넣을 수의 배열을 반환하는 방법이있다

추신 : 조각을 절단하는 동안 getSupportFragmentManager()도 변경해야합니다.

또한 당신은 뭔가 DIFF을 시도 할 수 있습니다 Why FragmentManager's getBackStackEntryCount() return zero?

+0

작동하는지 확인하겠습니다. –

+0

이제는 축배 메시지조차 보이지 않습니다. 첫 번째 뒤로 버튼을 누르면 앱이 닫힙니다 –

+0

sry my bad ..내 대답 – Nitesh

0

이 링크를 reffer. onBackPressed 방아쇠를 당할 때마다 Activity의 onBackPressed Method에 Exit 코드를 추가하고 을 추가하십시오. Gallery Fragment가 Active인지 확인하십시오. , 그럴 경우 종료 코드를 수행하십시오. 조각을 변경하십시오.

//define as field variable 
private boolean doubleBackToExit = false; 

MyGalleryFragment myFragment = (MyGalleryFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT"); 
if (myFragment != null && myFragment.isVisible()) { 

    if (doubleBackToExit) { 
     super.onBackPressed(); 
     finishAffinity(); 
     return; 
    } 
    this.doubleBackToExit = true; 
    toastMsg(getResources().getString(R.string.touch_again_to_exit)); 

    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      doubleBackToExit = false; 
     } 
    }, 2000); 
} else { 
    //Change Layout/Fragment 
} 

그냥 청춘이

fragTrans.replace(android.R.id.content, myFragment, "MY_FRAGMENT"); 

희망 작동합니다 ... 조각에 태그를 추가하는 것을 잊지 ..!

super.onBackPressed(); 

대신

getFragmentManager().popBackStack(); 

의 사용과 우리가 그 결과에 대해 알려

+0

작동하지 않습니다 –

+0

조각으로 태그를 추가 했습니까? 이 코드에 액티비티가 추가 되었습니까? –

+0

예. 하지만 줄에 오류가 발생했습니다 : "MyGalleryFragment myFragment = (MyGalleryFragment) getFragmentManager(). findFragmentByTag ("MY_FRAGMENT ");" 그래서 다음과 같이했습니다 : "Fragment myFragment = getFragmentManager(). findFragmentByTag ("a ");" –

0

보십시오.

+0

동일한 결과. 문제는 컨트롤이 항상 else 섹션에 들어가는 것입니다. 백 스택에 조각을 추가 한 후에도. 즉, (getFragmentManager(). getBackStackEntryCount()> 0)이 false 인 경우에도 마찬가지입니다. 어떤 아이디어가 계속되고 있니? –

+0

어떤 유형의 활동을 사용합니까? AppCompatActivity 또는 FragmentActivity입니까? –