2013-10-15 2 views
1

это мой первый пост, и я написал его после сканирования некоторых «вероятных предлагаемых» решений для проблем «onBackPressed» и «onKeyDown». Думаю, они не подходят для моей проблемы.onBackPressed не вызван в TabActivity

Но просветите меня, если я ошибаюсь (извините за это в случае).

Хорошо, вот моя простая проблема.

У меня 2 Активности: A: Starter активность (нормальная работа) B: MainMenu активность (TabActivity)

Всплеск активности (А) делает некоторые инициализации вещи и некоторые чеки. Если он выполняется, он просто называет намерение для основного меню Acitvity (B).

Деятельность B просто заполняет tabHost для 4 вспомогательных операций.

Хорошо, пока все в порядке. Но

Я хочу, чтобы активность B реагировала на кнопку BACK. Он не должен позволять пользователю вернуться к экрану запуска стартера, но вместо этого должен отправить приложение на задний план (нажата кнопка дома).

Но деятельность Б никогда не реагирует на это. Никакой вывод logcat не записывается.

Это мой код деятельность В.

public class StartScreenTab extends TabActivity { 
    private final static String TAG = StartScreenTab.class.getSimpleName(); 
    private MyTabHostWrapper tabHost; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initTab(); 

    } 

    private void initTab() { 
     Log.i(TAG, "init Main Tabs..."); 
     tabHost = new MyTabHostWrapper(this); 
     // tab Start 
     tabHost.addNewTabSpec("tab-start", R.string.app_name, 
       R.drawable.ic_tab_start, StartScreen.class); 

     // tab Karte 
     tabHost.addNewTabSpec("tab-karte", R.string.umkreis_activity_name, 
       R.drawable.ic_tab_karte, UmkreisActivity.class); 

     // tab Liste 
     tabHost.addNewTabSpec("tab-liste", R.string.liste_activity_name, 
       R.drawable.ic_tab_liste, ListeActivity.class); 

     // tab Settings 
     tabHost.addNewTabSpec("tab-prefs", R.string.menu_settings, 
       R.drawable.ic_tab_preferences, MyPrefsActivity.class); 

     tabHost.setFontColor("#FFFFFF"); 

    } 

    @Override 
    public void onDestroy(){ 
     Log.i(TAG, "onDestroy called."); 
     super.onDestroy(); 
    } 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      Log.i(TAG, "KEY 'back' released"); 
      onBackPressed(); 
      return true; 
     } 
     return super.onKeyUp(keyCode, event); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      Log.i(TAG, "KEY 'back' pressed"); 
      onBackPressed(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     Log.i(TAG, "BACK pressed"); 
     moveTaskToBack(true); 
     return; 
    } 
} 

Я вижу выход LogCat из инициализации и от OnDestroy. Но ничего из onKeyDown, onKeyUp и onBackPressed.

Вы можете мне помочь? Спасибо.

ответ

0

Я думаю, что это может быть вызвано tabHost. Я не указывал какую-либо команду фокуса для действий, связанных с вкладками, поэтому, возможно, событие «назад» где-то потеряно.

Я решил свою проблему, уклонившись от всей ситуации. Я удалил активность всплеска (A) и переместил свои init-функции в действие StartScreenTab (B).

Так что мне больше не нужно реагировать на заднее событие, потому что стандартное поведение теперь удовлетворяет.

1

Причина в том, TabActivity теряет фокус, и я нашел решение, вызвать код в нормальной деятельности

@Override 
public void onBackPressed() { 
    if (getParent() != null) { 
     getParent().onBackPressed(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
Смежные вопросы