Пустое пространство, когда я возвращаюсь в Activity (принудительная Soft Keyboard)

у меня естьActionView с пунктом меню наActionBar (с помощьюActionBarSherlock), Я могу отобразитьEditText в качестве поля поиска в нем. Это вход для запуска другогоActivity сCustomView в ActionBar, который отображает тот же макет (я ничего не использую, чтобы заставитьSoftKeyboard чтобы появиться во втором упражнении, здесь нет проблем). Когда я хочу, чтобы Soft Keyboard появлялась / исчезала автоматически, когда представление свернуто в первом действии, я использую:

метод openKeyboard

mImm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);  

метод closeKeyboard

mImm.hideSoftInputFromWindow(edittext.getWindowToken(), 0); 

Я используюActionExpandListener сделать SoftKeyboard появляется или исчезает, когдаView расширяется или разрушается. С этими двумя методами выше, я получил ожидаемый результат. Я нашел это на нескольких вопросах о SO (особенно наЗакрыть / скрыть программную клавиатуру Android а такжеОтображение программной клавиатуры для SearchView на ActionBar или жеПринудительное открытие Soft Keyboard).

Просто чтобы понять, когда я использовалSHOW_IMPLICIT или жеSHOW_FORCED в одиночку это не влияло на более низкие версии (как 2. +). EditText был сфокусирован, но клавиатура не появлялась (так что, наверное, это было плохо). В последних версиях (например, 4. +) это был хороший эффект и никаких проблем. Затем я заставил клавиатуру появиться сметод openKeyboard выше.

Теперь у меня есть некоторые проблемы с этим ...
В более низких версиях я получил «пустое» пространство до и после создания / уничтожения клавиатуры, я могу жить с этим.НО в последних версиях я получил «пустое» пространство, которое отображается привернуться к первому занятию, И это здесь менее чем за одну секунду, но достаточно, чтобы увидеть это!
Чтобы лучше понять, что происходит, смотрите изображение ниже:

1. Второе занятие: я нажимаю кнопку «Вверх» - клавиатура исчезает правильно.
2. (назад к) Первое действие: мой ListView покрыт "пустым" пробелом (цвет фона в моем приложении). И это исчезает(это та же высота SoftKeyboard, без сомнений!)

Я думаю, это потому, чтоЯ заставил клавиатуру появиться в моей первой деятельностихотя я тоже заставлял клавиатуру прятаться когда я иду вторым, но как я могу разрешить «пустое» пространство, когда я возвращаюсь к первому занятию?

Резюме
1) Действие => нажмите элемент в меню> просмотреть коллапс> показать клавиатуру> нажать текст> отправить его> скрыть клавиатуру> запустить действие B.
2) действие B => setCustomView на панели действий> показывать клавиатуру только в том случае, если текст редактирования выделен / нажата> нажмите текст> отправить его> скрыть клавиатуру> обновить содержимое> нажать кнопку «домой»> вернуться к действию A
3) Экран активности => «пустой» экран> исчезает.

Любая помощь будет очень признательна.
Спасибо за ваше время.

РЕДАКТИРОВАТЬ
Я добавляю свой код моего первого класса, чтобы увидеть, если кто-то скажет мне, что я делаю неправильно. Может быть, это мой код, который делает проблему.

Меню (ActionView)

ActionBar actionBar;
MenuItem itemSearchAction;
EditText mSearchEdit;
InputMethodManager mImm;

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getSupportMenuInflater().inflate(R.menu.main, menu);

    itemSearchAction = menu.findItem(R.id.action_search);
    View v = (View) itemSearchAction.getActionView();
    mSearchEdit = (EditText) v.findViewById(R.id.SearchEdit);
    itemSearchAction.setOnActionExpandListener(this);

    return true;
}  

OnActionExpandListener

@Override
public boolean onMenuItemActionExpand(MenuItem item) {
    actionBar.setIcon(R.drawable.ic_app_search); // change icon
    mSearchEdit.requestFocus(); // set focus on edittext
    openKeyboard(); // the method above
    mSearchEdit.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                closeKeyboard(); // same method as above
                // new Intent() to second activity 
                // perform with startActivity();
                itemSearchAction.collapseActionView(); // collapse view
                return true;
            }
            return false;
        }
    });
    // add a clicklistener to re-open the keyboard on lower versions
    mSearchEdit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openKeyboard();
        }  
    });
    return true;
}

@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
    actionBar.setIcon(R.drawable.ic_app_logo); // change icon again
    if(!(mSearchEdit.getText().toString().equals("")))
                            mSearchEdit.setText(""); // reinitial the edittext
    return true;
}  

OnOptionsItemSelected

// I had this verification when I make new Intent() to  
// a new activity, just in case (works like a charm)  
if(itemSearchAction.isActionViewExpanded())
         itemSearchAction.collapseActionView();  

ActionView (элемент + макет)

<item
     android:id="@+id/action_search"
     android:icon="@drawable/ic_app_search"
     android:title="@string/action_search"
     android:showAsAction="ifRoom|collapseActionView"
     android:actionLayout="@layout/search_actionview" />  

<EditText
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/SearchEdit"
     android:layout_width="fill_parent" android:layout_height="wrap_content"
     android:layout_gravity="right|bottom" android:gravity="left"
     android:layout_marginBottom="6dip"
     android:hint="@string/action_search"
     android:textColor="@color/white"
     android:textColorHint="@color/white"
     android:singleLine="true"
     android:cursorVisible="true"
     android:inputType="text"
     android:imeOptions="actionSearch|flagNoExtractUi"
     android:imeActionLabel="@string/action_search"
     android:focusable="true" android:focusableInTouchMode="true"
     android:background="@drawable/bt_edit_searchview_focused" >

     <requestFocus />
</EditText>

ОБНОВИТЬ

Я вижу много подобных проблем, сEditText вActionBar что не заставляет клавиатуру появляться, даже если фокус установлен. Я попробовал это снова (даже если я уже проверял несколько раз):

/*
* NOT WORKING 
* Sources: https://stackoverflow.com/questions/11011091/how-can-i-focus-on-a-collapsible-action-view-edittext-item-in-the-action-bar-wh  
* https://stackoverflow.com/a/12903527/2668136
*/
int mode = WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE;
getWindow().setSoftInputMode(mode);  

postDelayed() to show: .showSoftInput(mSearchEdit, InputMethodManager.SHOW_IMPLICIT); - 200ms (Not working on lower versions)
postDelayed() to hide: .hideSoftInputFromWindow(mSearchEdit.getWindowToken(), 0); - 200ms  

new Runnable() on edittext => requestFocus() + showSoftInput(SHOW_IMPLICIT/FORCED/HIDE_NOT_ALWAYS/HIDE_IMPLICIT_ONLY)

Кажется со мной толькоSHOW_FORCED|HIDE_IMPLICIT_ONLY может заставить клавиатуру показывать автоматически, когда вид сворачивается. После этого во всех версиях я должен сделатьhideSoftInputFromWindow 0 для сокрытия.
НО это не отображает клавиатуру, даже если текст редактирования нажат, поэтому я добавилClickListener заставить клавиатуру снова показывать (это происходит только в более низких версиях).

UPDATE2:
Это явно странно, когда я пытаюсь сделать немногоThread как я видел во многих SO-ответах (с / без ABS), в более низких версиях ничего не происходит.
Я попробовал другой способ. Я создал новый поток за короткое время до вызова нового намерения скрыть клавиатуру. У меня была клавиатура, которая заставляла закрыться, хорошо. И тогда я открыл новую деятельность, хорошо. Но теперь, когда я вернусь, оно того стоит! «Пустое» пространство также в более низких версиях, когда я вернусь. Я сделал это:

// close the keyboard before intent
closeKeyboard();
// make the intent after 500 ms
Handler handler = new Handler();
Runnable runner = new Runnable() {
    public void run() {
        // new intent with startActivity()
    }
};
handler.postDelayed(runner, 500); 
// collapse the View  
itemSearchAction.collapseActionView();  

Это вызывает у меня головную боль! Я не понимаю, почему в моем случае вышеприведенный совет не работает, тогда как на других ответах, когда они используют новый поток, чтобы показать / скрыть клавиатуру, это работает отлично.

НОТА: мои тесты были на(Эмулятор :) GalaxyNexus, NexusS, NexusOne и(реальные устройства :) Samsung GalaxySL (2.3.6) и Nexus4 (4.4).

Если кто-то может помочь мне в этой безобразной ситуации. Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос