2012-07-17 9 views
5

EDIT解決済み回答が別途投稿されましたAndroidキーボードが起動してもまだ表示されているメールの内容

私は自分のアプリケーションからメッセージを送信する方法を選択できるように、組み込みのIntent.ACTION_SEND "chooser"を起動します。それは正常に動作しますが、起動した電子メールプログラムで「破棄」を押すと、画面上のキーボードが表示された状態でアプリケーションに戻ります。私はimm.hideSoftInputFromWindow(...)のさまざまな呪文でそれを閉じようとしましたが、無駄です。任意のアイデアをどのようにこれを修正するには?

これは、私が 'chooser'を起動し、onActivityResult()でキーボードを閉じる方法です。 tabHostは、tabSpecを作成するために使用されるtabHostオブジェクトを保持するメインアプリケーション(MainApp)の静的メンバーです。

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

... 

} 

答えて

0

を呼び出すことができます信じています。これは、リストをスクロール、タッチ、移動するたびにキーボードが表示されているかどうかを確認し、キーボードが閉じられているかどうかを確認するために、これを行うのが最適な場所ではありません。それにもかかわらず、それはスタートです。ここから私はそれを置くより効率的な場所を試してみることができます。

@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

これはなぜ機能していますか?私は自分の状況でそれを使用しようとすると理解する必要があります。 – Poutrathor

0

使用このコードMAIL // EDの意図を呼び出す前に、ショーのキーボード

imm.showSoftInput(ed, 0); 

試しのための非表示キーボード

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

ためのEditText

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

ですこの onRestart()メソッドのコードは、同様に

OR

はあなたにも

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

おかげでこれを試すことができます。

+0

私はこれをしようとするだろうが、私は私のリストビューでのEditTextを持っていません。私はあなたに感謝します。 – wufoo

+0

あなたのlistActivityにテキストを編集していないと、もう一つのソリューションのために私のコードを編集しました。お返事ありがとうございます。 – SALMAN

+0

ありがとうございます。私はstateHiddenが設定されていますが、まだ運がありません。 – wufoo

0

は、私はあなたが私がL_Secondaryクラスでインスタンス化された私のArrayAdapterクラスのgetViewメソッド()に渡されたコンテキストを使用して終了onResumeでhideSoftInputFromWindow方法()

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

なぜこれがダウン表示されますか? – Leon

+0

わかりませんが、私が何か間違っている場合はお知らせください。 –

+0

userInputとは何ですか? –

2

私はこれが私のonResume(にそれを追加することによって、私のために働いた)

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

うまくいったこと... – peresisUser

+0

これはonResume()の代わりにonActivityResult()で書くこともできます。 –

関連する問題