8

मेरे पास एक एंड्रॉइड ऐप है जिसमें 2 खंडों वाला व्यूपेजर है। पहले खंड में एक संपादन टेक्स्ट फ़ील्ड होता है। जब ऐप लॉन्च होता है, तो वह फ़ील्ड तुरंत ध्यान केंद्रित करता है और सॉफ्ट कीबोर्ड लॉन्च होता है (जिसे मैं करना चाहता हूं)। दूसरे खंड में केवल एक सूची होती है (कोई संपादन योग्य टेक्स्ट फ़ील्ड नहीं)। जब मैं खंड 1 से खंड 2 तक स्वाइप करता हूं, तो मैं कीबोर्ड को दूर जाना चाहता हूं। मैंने जो भी कोशिश नहीं की है वह काम करने लगता है। कीबोर्ड न केवल दृश्य में रहता है, यह खंड 1 के संपादन टेक्स्ट को अद्यतन करना जारी रखता है।ViewPager Fragments से एंड्रॉइड ऐप में सॉफ़्ट कीबोर्ड छुपाएं

मुझे लगता है मैं या तो कीबोर्ड छिपाने के लिए गलत कोड का उपयोग कर रहा है या कोई गलत स्थान में रखने से समझ। यदि कोई भी सही कार्यान्वयन का उदाहरण पोस्ट कर सकता है तो इसकी सराहना की जाएगी!

मेरे नवीनतम प्रयास कोड है कि टुकड़ा 1 के onDetach में कुंजीपटल छुपाना चाहिए जगह थी() विधि:

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

    InputMethodManager imm = (InputMethodManager) this.context.getSystemService(Context.INPUT_METHOD_SERVICE); 

    // I'VE TRIED ALL THREE BELOW, NONE OF THEM WORK... 

     // imm.hideSoftInputFromWindow(this.messageView.getWindowToken(), 0); 
     // imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 
     // this.context.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
} 

उत्तर

10

this answer. मूल रूप से, आप अपने ViewPager के OnPageChangeListener आप के लिए कीबोर्ड छिपाने की आवश्यकता है देखें। (यदि आप अपने स्वाइप एनीमेशन चिकनी रहने के लिए चाहते हैं, onPageScrollStateChanged बजाय onPageSelected में करते हैं।)

@Override 
public void onPageScrollStateChanged(int state) 
{ 
    if (state == ViewPager.SCROLL_STATE_IDLE) 
    { 
     if (mViewPager.getCurrentItem() == 0) 
     { 
      // Hide the keyboard. 
      ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) 
       .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0); 
     } 
    } 
} 
0

अपने AndroidManifest आप गतिविधि घोषणा एंड्रॉयड में जोड़ना चाहिए में: windowSoftInputMode = "stateHidden":

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

और अपने लेआउट में EditText के बच्चों requestFocus से हटा दें:

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginLeft="15dp" 
    android:ems="10" > 
    <requestFocus /> 
</EditText> 
+0

यह सब समय प्रदर्शित करने से कुंजीपटल रोकने नहीं होगा? मैं केवल टुकड़ा 2. – Jabari

+0

पर इसे छिपाने के लिए यह softkeyboard प्रदर्शित जब गतिविधि अपने टुकड़े से भरा हुआ है रोकता है चाहता हूँ। लेकिन अगर आप कुछ एडिटटेक्स्ट पर क्लिक करते हैं, तो सॉफ्टकीबोर्ड प्रदर्शित किया जाएगा। आपकी गतिविधि द्वारा लोड किए गए सभी टुकड़ों को प्रभावित करता है। छिपाने के लिए हमेशा और कभी नहीं softkeyboard प्रदर्शित नहीं करते प्रकट आप एंड्रॉयड में stateAlwaysHidden का उपयोग करना चाहिए में,: windowSoftInputMode। मेरी अंग्रेजी के लिए खेद है। – ClarkXP

+0

लगभग काम करता है लेकिन जब आप एक अलग टुकड़े पर वापस स्विच करते हैं तो कीबोर्ड छुपा नहीं जाता है। – Timmmm

0
getActivity().getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);