2011-08-24 3 views
0

는이 같은 탭을 보여주는 활동 (Main)가 Main에는 MyGroup의 탭이 있습니다. MyGroupActivityA으로 시작하고 ActivityB으로갑니다. ActivityB에서 뒤로 버튼을 누르면 ActivityA으로 돌아가고 ActivityA의 뒤에서 내가 앱을 닫고 싶습니다.뒤로 버튼 동작 및 ActivityGroup

이렇게 해보았습니다. ActivityB에서 : ActivityA에서

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    System.out.println("ActivityB PRESSED"); 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     MyGroup mg = (MyGroup) getParent(); 
     return mg.onKeyDown(keyCode, event); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

같은 : Main에 마지막으로

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      System.out.println("MG PRESSED"); 
       if (state == A) 
       return false; 
      else if (state == B) { 
      setContentView(getLocalActivityManager().startActivity("activityA", new Intent(this, ActivityA.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView()); 
       state = A; 
       return true; 
     } 

     return false; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

, 단지 System.out에 : MyGroup에서 지금

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     System.out.println("ActivityA PRESSED"); 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      MyGroup mg = (MyGroup) getParent(); 
      return mg.onKeyDown(keyCode, event); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

,

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    System.out.println("MAIN PRESSED"); 
    return super.onKeyDown(keyCode, event); 
} 

이제는 이것이 내가 원하지 않는 현재 행동입니다.

  • 앱이 시작되면 ActivityA에 있습니다. Backbutton -> 앱이 닫힙니다. 승인.
  • 앱이 시작되면 ActivityA -> ActivityB -> 뒤로 버튼 -> ActivityA가 표시됩니다. 승인.
  • 앱이 시작되면 ActivityA -> ActivityB -> Back -> ActivityA -> ActivityB -> Back -> 앱이 닫힙니다. 안돼!

명백하게, 제 2 시간 ActivityB 도시되어 뒤로 버튼 대신 ActivityB 또는 MyGroup의, Main 의해 처리되고있다.

어떻게 해결할 수 있습니까?

편집

나는 ActivityC을 추가했습니다. 첫 번째 두 가지 활동에서의 행동이 정상적인 것처럼 보이고 세 번째부터는 Main 활동이 버튼을 누르는 것으로 처리됩니다. > B - -> A A에 의해 처리된다 -가되도록

은> B -> 메인

및 A -> B -> B - -> 메인> C는 처리된다.

답변

0

그래서 답을 찾았습니다.

Main에 admob adview가 있는데,이 문제의 원인으로 보입니다.

<?xml version="1.0" encoding="utf-8"?> 
    <TabHost 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
     android:id="@android:id/tabhost" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"  
        android:padding="0dp"> 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" /> 
     <com.google.ads.AdView 
      android:id="@+id/adView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      ads:adUnitId="@string/adkey" 
      ads:adSize="BANNER" 
      ads:loadAdOnCreate="false" 
      android:layout_alignParentBottom="true" 
      android:focusable="false"/> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_above="@id/adView" 
      android:layout_below="@android:id/tabs" /> 

    </RelativeLayout> 
</TabHost> 

나는 AdView의 제거, 문제가 발생하지 않습니다이는 XML이다. onBackPressed` 동일한 효과를 얻을 수``onKeyDown`를 사용

<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <FrameLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="0dp"> 
      <TabWidget 
       android:id="@android:id/tabs" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentTop="true" /> 

      <FrameLayout 
       android:id="@android:id/tabcontent" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_below="@android:id/tabs" /> 
     </RelativeLayout> 
     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <com.google.ads.AdView 
       android:id="@+id/adView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       ads:adUnitId="@string/adkey" 
       ads:adSize="BANNER" 
       ads:loadAdOnCreate="false" 
       android:layout_alignParentBottom="true" 
       android:focusable="false" /> 
     </RelativeLayout> 
    </FrameLayout> 
</TabHost> 
0

활동 내에서 public void onBackPressed()을 무시하고 뒤로 버튼을 직접 처리하십시오. super.onBackPressed();을 호출하면 뒤로 버튼 누름 (앱 종료)의 표준 동작에 영향을 미칩니다.

+0

나 :

지금이 문제를 해결하기 위해,이에 XML을 변경했습니다. – nhaarman