2011-01-05 15 views
0

もう一度奇妙な問題。私は、活動Main.javaとDialogLikeActivity.javaを持っています。オープン/クローズソフトキーボード(ギャラクシーS)

メインでは、私は

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

DialogLikeActivity(活性がなく、ダイアログテーマでスタイルとアンドロイドで:マニフェストで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); 
      } 
     } 
    }); 

また、キーボードが電話入力タイプで開いていることを確認します。 Main keyboardMode変数のリストをクリック/スクロールすると2になり(常に非表示)、キーボードは非表示になります(list.onTouchリスナーと呼ばれるhideKeyboardメソッド)。リストの項目をクリックすると、開いているキーボードと電話の入力タイプでDialogLikeActivityが再び開きます。 OKをクリックすると、MainのRisumeが起動し、キーボードは非表示になります(コードの上に表示されます)。

どのように見えるのですかビデオ(ビデオのOKボタンは記事OKボタンです) - Video (3,24 MB)をご覧ください。

だから、実際には - 私はOK(articleOK)ボタンをクリックした場合 - キーボードが唯一DialogLikeActivityに示されなければならない - 私は、しかし、リストthorughスクロール開始またはリスト内のいくつかの項目をクリックした場合キーボードは常に、を示されなければなりませんアクティビティ、そうでなければメインでそれは隠れていなければなりません(私は上のEditTextフィールドをクリックすると、それが再び開く)。ビデオオン

あなたはHTCの欲望とすべては私が欲しいだけのように動作します見ることができますが、 - ギャラクシーSには、常にそれは文字でキーボードのを開く一部が作動していることが示されたが、私は、タップすると/リストをスクロールし、それを隠す代わりにタイプ(!)を入力してください。。問題はどこですか?

OKボタン - 常にキーボードを表示します(MainとDialogLikeActivityにあります)。タップ/スクロールすると、リストのキーボードがDialogLikeActivityでのみ表示されます。

+0

について、あなたは何を話している?これだけのラインで解決し[OK]を、問題あなたの質問は何ですか? – Falmarri

+0

なぜ私のHTC Desireでは動作しますが、Galaxy Sでは動作しません(それは隠されたレタータイプのレイアウトでキーボードを表示します)? – svenkapudija

答えて

2

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

EDIT:

mgr.toggleSoftInput(0, 0); 

及びこれらの2行なし:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 
articleNumber.setInputType(0);