2012-07-17 12 views
5

EDIT: Gelöst. Antwort geschrieben getrennt unterAndroid-Tastatur nach dem Start weiterhin sichtbar E-Mail-Absicht

Ich starte den eingebauten Intent.ACTION_SEND "chooser", also kann der Benutzer wählen, wie man eine Nachricht von meiner Anwendung sendet. Es funktioniert OK, aber wenn ich im gestarteten E-Mail-Programm 'Verwerfen' drücke, kehrt es zu meiner Anwendung mit der noch sichtbaren Bildschirmtastatur zurück. Ich habe versucht, es mit verschiedenen Beschwörungen von imm.hideSoftInputFromWindow (...) zu schließen, aber ohne Erfolg. Irgendwelche Ideen, wie das zu beheben ist?

So starte ich den 'chooser' und versuche, die Tastatur in onActivityResult() zu schließen. Beachten Sie, dass tabHost ein statisches Element in meiner Hauptanwendung (MainApp) ist, das das tabHost-Objekt enthält, das zum Erstellen der tabSpecs verwendet wird.

public class L_Secondary extends ListActivity implements myConst 
{ 
    @Override 
    protected void onCreate (Bundle savedInstanceState) 
    { 
    super.onCreate (savedInstanceState); 
    setContentView(R.layout.l_people_secondary); 

    // instantiate the custom array adapter class and pass it some info to build a ListView with. 
    ListView lv = getListView(); 
    lv.setOnItemClickListener (oicl); 
    A_secondary da = new A_secondary (this, android.R.layout.simple_list_item_single_choice, mPiecesArray, mPartsArray); 

    setListAdapter (da); 
    } 

    ... 


    // after launching the email client, the keyboard stays visible 
    // over the Listview. Currently the keyboard gets forced to close 
    // in getView() of the ArrayAdapter class da, in onCreate() above     
    public void launchEmail() 
    { 
    try 
    { 
    // use the builtin chooser for users mail app 
    Intent sendIntent = new Intent(Intent.ACTION_SEND, Uri.fromParts ("mailto", "[email protected]", null)); 
    sendIntent.setType("text/plain");  

    sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "msg_subject"); 
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT, "msg_body"); 

    startActivityForResult (Intent.createChooser(sendIntent, "Send via which Application?"), 0); 
    } 
    catch (Exception e) 
    { 
    Toast.makeText (this, "No activity was found to handle this action",Toast.LENGTH_SHORT).show(); 
    } 
    } 

... 

} 

Antwort

0

ich den Kontext zu getView bestand mit endete() in meiner ArrayAdapter Klasse, die in der L_Secondary Klasse instanziiert wird. Es ist nicht der beste Ort, um dies zu tun, denn jedes Mal, wenn die Liste gescrollt, berührt oder verschoben wird, prüft sie, ob die Tastatur sichtbar ist, und schließt sie, falls dies der Fall ist. Trotzdem ist es ein Anfang. Von hier aus kann ich versuchen, einen effizienteren Platz zu finden.

@Override 
public View getView (int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    Context ctx = parent.getContext(); 

    if (row == null) 
    { 
     LayoutInflater inflater = ((Activity) ctx).getLayoutInflater(); 
     row = inflater.inflate (R.layout.li_secondary, parent, false); 
    } 

    // hide the keyboard when coming back from Email client Intent 
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); 
    if (imm.isActive() == true) 
     imm.hideSoftInputFromWindow (MainApp.tabHost.getCurrentTabView().getApplicationWindowToken(),imm.HIDE_NOT_ALWAYS); 
    ... 
} 
+0

Warum funktioniert das?Ich muss verstehen, um es in meiner Situation zu benutzen. – Poutrathor

0

Verwenden Sie diesen Code, bevor Sie eine Absicht MAIL // ed Aufruf ist EditText

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 

für hide Tastatur

imm.hideSoftInputFromWindow(ed.getWindowToken(), 0); 

für Show-Tastatur

imm.showSoftInput(ed, 0); 

try Dies Code auf onRestart() -Methode als auch

OR

Sie können versuchen, diese auch

<activity android:name=".YourActivity" 
      android:windowSoftInputMode="stateHidden"></activity> 

Dank.

+0

Ich würde versuchen, diese aber ich eine EditText nicht in meinem Listview haben. Ich werde experimentieren, danke. – wufoo

+0

Ich habe meinen Code für eine weitere Lösung bearbeitet, falls Sie in Ihrer listActivity keinen Text haben. Danke – SALMAN

+0

Danke. Ich habe mich zwar gesetzt, aber immer noch kein Glück. – wufoo

0

Ich glaube, Sie die hideSoftInputFromWindow Methode in onResume nennen könnten()

protected void onResume() 
{ 
    InputMethodManager keyboard = (InputMethodManager) 
    getSystemService(Context.INPUT_METHOD_SERVICE); 
    keyboard.hideSoftInputFromWindow(userInput.getWindowToken(), 0); 
} 
+0

Warum wird das abgelehnt? – Leon

+0

Nicht sicher, aber wenn ich etwas falsch mache, lass es mich wissen –

+0

was ist userInput? –

2

Das fand ich für mich gearbeitet, indem sie es auf meine onResume Zugabe()

protected void onResume() 
{ 
    Handler h = new Handler(); 
    h.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     keyboard.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0); 
    } 
    }, 500); 
} 
+0

einzige Sache, die funktioniert ... – peresisUser

+0

Sie können dies auch in onActivityResult() anstelle von onResume() schreiben. –

Verwandte Themen