0

了解しました。別の奇妙な問題です。Main.javaとDialogLikeActivity.javaのアクティビティがあります。

メインで私は持っています

EditText (articleNumber) - phone input type (in .XML)
Button (articleOK)
list (list)

DialogLikeActivity (アクティビティですが、Dialogテーマとマニフェストのandroid:windowSoftInputMode = "stateAlwaysVisible"タグでスタイル設定されています)について

EditText (articlePackaging) - phone input type (in .XML)
Button (finish)

何が欲しい?メインアクティビティに入ると、キーボードは電話入力タイプで開いていますが、それで問題ありません。EditTextフィールドをクリックし、何かを入力して[OK]をクリックすると、静的変数が状態1になります(常にキーボードが表示されます)。これは、メインアクティビティの静的変数です。

public static int keyboardMode = 1;

[OK]をクリックすると、キーボードが開いた状態でDialogLikeActivityが開きます(電話入力タイプ)。[OK]をクリックすると、メインキックの再開が始まります

@Override
public void onResume() {
    super.onResume();

    if (keyboardMode == 1) {
        showKeyboard(articleNumber);
    } else {
        hideKeyboard(articleNumber);
    }
}   

public static void showKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);

    ((InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(view, 0);

    articleNumber.setInputType(InputType.TYPE_CLASS_PHONE);
}

public static void hideKeyboard(View view) {
    InputMethodManager mgr = (InputMethodManager) myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);

    articleNumber.setInputType(0);
}

// Listener to showKeyboard if user clicks on EditText field and set InputType to PHONE, insted it would remain (0)

    articleNumber.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showKeyboard(articleNumber);
        }
    });

// Listener so when user touches the list - it hides the keyboard and sets variable on 2 so keyboard is always HIDDEN

    list.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            hideKeyboard(articleNumber);
            keyboardMode = 2;

            return false;
        }
    });

// Listener so when user clicks on ArticleOK - keyboard is always OPEN

articleOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {               
                keyboardMode = 1;

                    Intent i = new Intent(NewOrderArticles.this, NewQuantityDialog.class);
                    i.putExtra("articleid", articleId);
                    startActivity(i);
            }
        }
    });

また、キーボードが電話入力タイプで開いていることを確認します。メインキーボードのリストをクリック/スクロールすると、変数は2(常に非表示)になります。そのため、キーボードは非表示になります(list.onTouchリスナーと呼ばれるhideKeyboardメソッドを使用)。リスト内の項目をクリックすると、キーボードと電話の入力タイプを開いた状態でDialogLikeActivityが再び開きます。[OK]をクリックすると、メインの[再開]が開始され、キーボードが非表示になります(上のコードを参照)。

ビデオをご覧ください(ビデオの[OK]ボタンはarticleOKボタンです)-ビデオ(3,24 MB)

したがって、実際には-OK(articleOK)ボタンをクリックした場合-キーボードは常に表示される必要がありますが、リストをスクロールし始めるか、リスト内の項目をクリックすると、キーボードはDialogLikeActivityアクティビティでのみ表示される必要があります。それ以外の場合はMainで表示される必要があります。非表示のままにします(もちろん、上部のEditTextフィールドをクリックすると、再び開きます)。

ビデオではHTCDesireを見ることができ、すべてが私が望むように機能しますが、Galaxy Sでは常に表示部分が機能していますが、リストをタップ/スクロールすると、非表示にする代わりに文字タイプ(!)でキーボードが開きますそれ。問題はどこにありますか?

したがって、[OK]ボタン-常にキーボードを表示します(MainおよびDialogLikeActivityで)。リストをタップ/スクロールすると、DialogLikeActivityでのみキーボードが表示されます。

4

1 に答える 1

2

キーボードに数字が表示されるEditTextでも同じ問題が発生します。[OK]または[キャンセル]をクリックすると、Samsung Galaxy Sデバイスで、仮想キーボードが非表示にならず、文字タイプのキーボードが表示されます。エミュレーター2.1または2.2と私のHTCHeroでは正常に動作しますが、2.2のSamsungGalaxySデバイスでは動作しません。私も試しました:mgr.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY、0); しかし、それでもチャンスはありません

編集:わかりました、この行だけで問題が解決しました:

mgr.toggleSoftInput(0, 0);

これらの2行なし:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0);
articleNumber.setInputType(0);
于 2011-01-20T11:17:38.657 に答える