2011-01-05 3 views
0

Хорошо, еще одна странная проблема. У меня есть активность Main.java и DialogLikeActivity.java.Открытая/закрывающая программная клавиатура (Galaxy 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; 

Нажав на ОК, открывается диалоговое окно DialogLikeActivity с открытой клавиатурой (тип входного сигнала). Когда я нажимаю OK onResume of Main kicks in

@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 (всегда скрывать) - поэтому клавиатура скрывается (с помощью метода hideKeyboard, называемого list.onTouch-слушателем). Если я нажму на какой-либо элемент в списке, он снова откроет диалоговое окно DialogLikeActivity с открытой клавиатурой и типом ввода. Если я нажму OK onResume в Main пинками и скрывает клавиатуру (см. Код вверх).

Как это выглядит, пожалуйста, посмотрите видео (кнопка ОК в видео - кнопкаOKOK) - Video (3,24 MB).

Так на самом деле - если нажать кнопку OK (articleOK) - клавиатура всегда должна быть показана, если я, однако начать прокрутку Копание списка или нажмите на какой-то элемент в списке - клавиатура должна быть показана только в DialogLikeActivity активность, иначе в Main он должен оставаться скрытым (если я нажму на поле EditText в верхней части, он снова откроется).

На видео вы можете увидеть HTC Desire и все работает именно так, как я хочу, но - на Galaxy S всегда показывает часть работает, но если я нажимаю/прокрутку списка, его открыть-х до клавиатуры с буквой типа (!), а не скрывать его. Где проблема?

Кнопка OK - всегда показывает клавиатуру (в режиме Main и DialogLikeActivity). Если нажать/прокрутить список, покажите клавиатуру только в DialogLikeActivity.

+0

Что ты говоришь? Каков твой вопрос? – Falmarri

+0

Почему это работает на моем HTC Desire, но не на Galaxy S (он показывает клавиатуру в макете типа букв, которую только что скрывает)? – svenkapudija

ответ

2

У меня такая же проблема с EditText, что всплывает клавиатура с цифрами. После нажатия кнопки «ОК» или «Отмена» виртуальная клавиатура не скрывает и не отображает клавиатуру с буквенным типом на устройстве Samsung Galaxy S. Он отлично работает на эмуляторах 2.1 или 2.2 и моем HTC Hero, но не на устройстве Samsung Galaxy S с 2.2. Я также пробовал: mgr.toggleSoftInput (InputMethodManager.HIDE_IMPLICIT_ONLY, 0); , но до сих пор нет шансов

EDIT: хорошо, проблема решена только с этой линии:

mgr.toggleSoftInput(0, 0); 

и без этих 2-х линий:

mgr.hideSoftInputFromWindow(view.getWindowToken(), 0); 
articleNumber.setInputType(0); 
Смежные вопросы