Leerer Raum, wenn ich zur Aktivität zurückkehre (Soft-Tastatur erzwungen)

ich habe einActionView mit Menüpunkt einActionBar (mitActionBarSherlock) Kann ich eineEditText als Suchfeld drin. Es ist eine Eingabe, um eine andere zu startenActivity mit einerCustomView in der ActionBar, die das gleiche Layout anzeigt (ich verwende nichts, um das zu erzwingen)SoftKeyboard Um in dieser zweiten Aktivität zu erscheinen, gibt es hier kein Problem. Wenn ich möchte, dass die Bildschirmtastatur automatisch angezeigt bzw. ausgeblendet wird, wenn die Ansicht in der ersten Aktivität ausgeblendet wird, verwende ich Folgendes:

openKeyboard-Methode

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

closeKeyboard-Methode

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

Ich verwende dasActionExpandListener , damit das SoftKeyboard angezeigt oder ausgeblendet wird, wenn dieView expandiert oder kollabiert. Mit diesen beiden oben genannten Methoden habe ich das erwartete Ergebnis. Ich fand dies bei mehreren Fragen zu SO (insbesondere zuSchließe / verstecke die Android-Tastatur undAnzeigen der Softtastatur für SearchView in ActionBar oderÖffnen der Soft-Tastatur erzwingen).

Nur um zu verstehen, wann ich benutzt habeSHOW_IMPLICIT oderSHOW_FORCED Alleine auf niedrigere Versionen (als 2. +) hatte dies keine Auswirkung. Der EditText war fokussiert, aber die Tastatur wurde nicht angezeigt (Sie vermuten also, es war eine schlechte Sache). In neueren Versionen (wie zum Beispiel 4. +) war es ein schöner Effekt und kein Problem. Dann habe ich die Tastatur gezwungen, sich mit der zu zeigenopenKeyboard-Methode über.

Jetzt habe ich ein paar Probleme damit ...
In niedrigeren Versionen habe ich vor und nach dem Erstellen / Zerstören der Tastatur "leeren" Speicherplatz, damit kann ich leben.ABER in neueren versionen habe ich "leeren" platz bekommen den es anzeigt wenn ichkehren Sie zur ersten Aktivität zurück. Und es ist in weniger als einer Sekunde hier, aber ausreichend, um das zu sehen!
Um besser zu verstehen, was passiert, sehen Sie sich das folgende Bild an:

1. Zweite Aktivität: Ich drücke die Up Home-Taste - die Tastatur verschwindet ordnungsgemäß.
2. (zurück zu) Erste Aktivität: Meine ListView wird von einem "leeren" Bereich abgedeckt (Hintergrundfarbe in meiner Anwendung). Und es verschwindet(Dies ist zweifellos die gleiche Höhe des SoftKeyboards!)

Ich denke, es liegt daranIch habe die Tastatur gezwungen zu erscheinen in meiner ersten Tätigkeitobwohl ich auch die tastatur zum verstecken gezwungen habe wenn ich zum zweiten gehe, aber wie kann ich den "leeren" Raum auflösen, wenn ich zur ersten Aktivität zurückkehre?

Zusammenfassung
1) Eine Aktivität => Element im Menü drücken> Minimieren anzeigen> Tastatur einblenden> Text antippen> senden> Tastatur ausblenden> Aktivität B starten.
2) B activity => setCustomView in der Aktionsleiste> Tastatur nur anzeigen, wenn der Edittext aktiviert / angeklickt ist> Text antippen> senden> Tastatur verbergen> Inhalt aktualisieren> Home-Taste drücken> zu A activity zurückkehren
3) Eine Aktivität => "leerer" Bildschirm> Bildschirm verschwindet.

Jede Hilfe wird sehr geschätzt.
Vielen Dank für Ihre Zeit.

BEARBEITEN
Ich füge meinen Code meiner ersten Klasse hinzu, um zu sehen, ob mir jemand sagt, was ich falsch mache. Vielleicht ist es mein Code, der das Problem verursacht.

Menü (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 (Element + Layout)

<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>

AKTUALISIEREN

Ich sehe viele ähnliche Probleme mitEditText imActionBar Dadurch wird die Tastatur nicht angezeigt, obwohl der Fokus gesetzt wurde. Ich habe es noch einmal versucht (auch wenn ich es schon mehrmals getestet habe):

/*
* 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)

Es scheint nur bei mirSHOW_FORCED|HIDE_IMPLICIT_ONLY kann erzwingen, dass die Tastatur automatisch angezeigt wird, wenn die Ansicht geschlossen wird. Danach muss ich in allen Versionen eine machenhideSoftInputFromWindow auf 0, um es zu verstecken.
ABER Dies zeigt die Tastatur auch dann nicht an, wenn der Edittext gedrückt wird, und ich fügte eine hinzuClickListener um die Tastatur wieder zum Anzeigen zu zwingen (dies geschieht nur bei niedrigeren Versionen).

UPDATE2:
Es ist eindeutig komisch, wenn ich versuche, ein bisschen zu machenThread Wie ich in vielen SO-Antworten (mit / ohne ABS) gesehen habe, passiert in niedrigeren Versionen nichts.
Ich habe es anders versucht. Ich habe den neuen Thread erstellt, um kurz vor dem Aufruf die neue Absicht zum Ausblenden der Tastatur zu haben. Ich hatte die Tastatur, die zum Schließen gezwungen wurde, OK. Und dann habe ich die neue Aktivität geöffnet, OK. Aber jetzt, wenn ich zurückkomme, lohnt es sich! Der "leere" Raum ist auch auf niedrigeren Versionen, wenn ich zurückkomme. Ich tat dies:

// 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();  

Es gibt mir Kopfschmerzen! Ich verstehe nicht, warum in meinem Fall der obige Tipp nicht funktioniert, wohingegen bei anderen Antworten, bei denen ein neuer Thread zum Anzeigen / Ausblenden der Tastatur verwendet wird, dies perfekt funktioniert.

HINWEIS: Meine Tests liefen(Emulator:) GalaxyNexus, NexusS, NexusOne und(echte Geräte :) Samsung GalaxySL (2.3.6) und Nexus4 (4.4).

Wenn mir jemand in dieser hässlichen Situation helfen kann. Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage