2012-01-05 36 views
12

FragmentActivity mới hiển thị một đoạn với một vài nút trên đó. Khi bạn bấm vào một trong các nút, FragmentActivity sẽ hiển thị một đoạn mới với một số trường editText. Tôi dường như không thể nhận được bàn phím đầu vào mềm để hiển thị khi đoạn mới của tôi với các trường editText được hiển thị.SoftKeyboard không hiển thị cho Fragment

Sử dụng cửa sổPhương thức đầu vào trên tệp kê khai xuất hiện như hiển thị bàn phím ngay lập tức.

android:windowSoftInputMode="stateUnchanged" 

Tôi đã cố gắng sử dụng

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)

vô ích. Đây là cách tôi hiển thị các đoạn mới từ Hoạt động của tôi:

public void clickHandler(View view) { 
     switch (view.getId()) { 
     case R.id.login: 
      loginFragment = new LoginFragment(); 
      FragmentTransaction transaction = getSupportFragmentManager() 
        .beginTransaction(); 

      transaction.replace(R.id.fragment_container, loginFragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
      getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
      break; 

...

Tôi cũng đã cố gắng gọi setSoftInputMode từ bên trong onCreate của đoạn và điều đó đã không làm việc là tốt. Nghĩ rằng đó là vấn đề về thời gian tôi đã thử với handler.postDelayed và điều đó cũng không có tác dụng. Nó trông giống như sau:

onResume...  
Handler handler = new Handler(); 
      Runnable runnable = new Runnable() { 

       @Override 
       public void run() { 
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);     
       } 
      }; 

      handler.postDelayed(runnable, 1000); 

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn.

+0

Tôi biết điều này là cũ, nhưng để tham khảo trong tương lai : Tôi tin rằng Window.setSoftInputMode phải được thực hiện một lần trong OnCreate của Activity, vì sau này nó dường như không có hiệu lực. Trong quá trình hoạt động, InputMethodManager phải được sử dụng để thay đổi. – ProjectJourneyman

Trả lời

19

On của bạn onResume bạn có thể làm điều này:

EditText someEditText = (EditText)getActivity().findViewById(R.id.someEditText); 
someEditText.requestFocus(); 
InputMethodManager mgr =  (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
mgr.showSoftInput(someEditText, InputMethodManager.SHOW_IMPLICIT); 
+0

Cảm ơn bạn! đã làm việc –

+0

Bạn được chào đón Nelson: D – jegumi

+4

không hoạt động đối với tôi. – feresr

4

Tôi đã có một vấn đề rất giống nhau. Fragment A gọi đoạn B, trong đó đoạn B (Layout with TABS) có EditText trong đó. Bàn phím sẽ không xuất hiện cho hộp EditText này trừ khi tôi nhấp vào cái gì khác.

Tôi đã thử giải pháp ở đây và trên nhiều giải pháp ngăn xếp khác. MANY. Người duy nhất làm việc cho tôi là rõ ràng tập trung vào EditText khi EditText được nhấp. Trong OnFocusChangeListener tôi đã có thể buộc bàn phím mở và đóng.

Sự cố này chỉ xảy ra đối với tôi trên thiết bị Android 2.34 chứ không phải 2.2 hoặc 3.0. Emulator cũng không có vấn đề gì. Tệp kê khai chỉ có điều chỉnhResize trong đó.

Vì vậy, đây là một giải pháp mà làm việc cho tôi (hy vọng ai đó tìm thấy hữu ích này):

Trong onCreateView (...)

// 
    //Inflate Your Layout Here 
    // 

    //set on focus to force keyboard 
    editText.setOnFocusChangeListener(new OnFocusChangeListener() 
    { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) 
     { 
      Log.d(TAG,"On Foucs. Has Focus = " + hasFocus); 

      if (hasFocus) 
      { 
       //open keyboard 
       ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, 
         InputMethodManager.SHOW_FORCED); 
      } 
      else 
      { 
       //close keyboard 
       ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(
         v.getWindowToken(), 0); 
      }        
     } 
    }); 

    //Set on click listener to clear focus 
    editText.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View clickedView) 
     {       
      clickedView.clearFocus(); 
      clickedView.requestFocus();        
     }  
    });  
+0

Tôi biết về điều này, nhưng tôi quên tất cả về nó. Cảm ơn bạn đã đăng nó. Giúp tôi một bó :-) – George

+0

Cảm ơn rất nhiều, tôi cũng đã thử nhiều cách, đây là giải pháp duy nhất. – thanhbinh84

Các vấn đề liên quan