EditText traci ostrość za pomocą twardej klawiatury, gdy TabHost jest obecny w aktywności

Wyświetla tekst EditText w tabhost. Tabhost znajduje się wewnątrz SherlockFragmentActivity.

Przypuśćmy, że jestem w trybie dotykowym i klikam EditText, aby ustawić ostrość i zacząć pisać. Po wpisaniu 2-3 znaków zdecydowałem się użyć mojej twardej klawiatury. Gdy tylko naciśniesz pierwszy klawisz stały, wychodzę z trybu dotykowego i powoduje to również, że fokus wraca do aktualnie wybranej karty. Dopóki nie użyję twardych klawiszy nawigacyjnych, aby przywrócić fokus do mojego EditText, nie będę mógł wpisać w EditText.

Ten problem jest spowodowany tylko wtedy, gdy TabHost nie znajduje się w TabActivity.

Szybki przykładowy kod do odtworzenia tego problemu może być następujący: - FragmentTabs - aktywność przykładowego kodu ActionBarSherlock. Wybierz CustomTab i spróbuj wpisać dowolny tekst wewnątrz widoku wyszukiwania na pasku akcji za pomocą twardej klawiatury. Zobacz fokus po prostu przechodzi do karty.

Problem jest odtwarzalny na Androidzie 2.2, 4.0 i przy użyciu emulatora ICS.

Czy ktoś ma więcej informacji. o tym problemie?

(Wydaje się, że wspomniane jest tutaj obejście:https://stackoverflow.com/a/8684025/333137 ale wygląda jak włamanie)

Dzięki.

Edytuj: Po dokładniejszym zbadaniu znalazłem funkcję setup () wewnątrz klasy TabHost, która musi być wywołana tylko wtedy, gdy TabHost nie jest używany wewnątrz TabActivity. Rejestruje on odbiornik klucza, który odbiera wywołanie zwrotne tylko po naciśnięciu klawisza twardego.

void setup(){
       // KeyListener to attach to all tabs. Detects non-navigation keys
        // and relays them to the tab content.
        mTabKeyListener = new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_DPAD_LEFT:
                    case KeyEvent.KEYCODE_DPAD_RIGHT:
                    case KeyEvent.KEYCODE_DPAD_UP:
                    case KeyEvent.KEYCODE_DPAD_DOWN:
                    case KeyEvent.KEYCODE_ENTER:
                        return false;

                }
                **mTabContent.requestFocus(View.FOCUS_FORWARD);**
                return mTabContent.dispatchKeyEvent(event);
            }

Nie jestem pewien, dlaczego wywołuje requestFocus (View.FOCUS_FORWARD), ale to nie ustawia ostrości wewnątrz EditText (co powinno?). Również w przypadku widoku wyszukiwania na pasku akcji jest całkowicie poza zakładką.

questionAnswers(1)

yourAnswerToTheQuestion