23

मेरे पास टैब के साथ एक ViewPager + ActionBar है। जब मैं दूसरे टैब पर "स्वाइप" करता हूं तो मैं सॉफ्ट कीबोर्ड को छिपाना चाहता हूं लेकिन मैं यह नहीं समझ सकता कि कैसे।ViewPager.OnPageChangeListener onPageSelected() में प्रोग्रामेटिक रूप से सॉफ़्ट कीबोर्ड छुपाएं?

मैं FragmentPageAdapter के लिए निर्माता के लिए मेरी गतिविधि में उत्तीर्ण कर ली है तो मैं

activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

कॉल कर सकते हैं लेकिन यह कुछ भी नहीं है (और यह कोड का एक ही पहुंचा जा सकता क्षेत्र में है) ... मदद?

+0

/* सॉफ़्ट कीबोर्ड को छुपाएं * के समय कीपैड को छिपाना चाहते हैं * ।/\t एक पंक्ति में: '(। (InputMethodManager) getActivity() getSystemService (Context.INPUT_METHOD_SERVICE)) hideSoftInputFromWindow (view.getWindowToken(), 0);' –

उत्तर

35

अपनी गतिविधि में, आप निम्न कर सकते हैं:

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
     final InputMethodManager imm = (InputMethodManager)getSystemService(
      Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(mView.getWindowToken(), 0); 
    } 

    @Override 
    public void onPageScrolled(int position, float offset, int offsetPixels) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 
}); 
+5

धन्यवाद, यह काम किया। मुझे अपने व्यू पेजर को व्यू के रूप में उपयोग करना था और गतिविधि करना था .getSystemService लेकिन प्रक्रिया ने – snotyak

+1

एक लाइन में काम किया: '((इनपुट मोड मैनेजर) getActivity()। GetSystemService (Context.INPUT_METHOD_SERVICE)) hideSoftInputFromWindow (view.getWindowToken(), 0); ' –

+2

आप व्यू पेजर को दृश्य सेट कर सकते हैं ताकि आप बिना किसी दृश्य के इसका उपयोग कर सकें: imm.hideSoftInputFromWindow (mViewPager.getWindowToken(), 0); – TacoEater

30

मैं onPageSelected() क्योंकि स्वाइप एनीमेशन के साथ छुपा कुंजीपटल एनीमेशन शिकंजा प्रयोग नहीं करते। इसके बजाय onPageScrollStateChanged() का उपयोग करें:

@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); 
     } 
    } 
} 
+2

बहुत बेहतर समाधान, कोई एनीमेशन गड़बड़ नहीं। धन्यवाद! – azendh

+1

यह उत्तर स्वीकृत उत्तर से बेहतर है। धन्यवाद। – Murat

5

आम तरीका:

private void hideVirturalKeyboard(){ 
View v = getCurrentFocus(); 
if (v != null && v instanceof EditText) { 
InputMethodManager mgr = (InputMethodManager)(v.getContext().getSystemService(Context.INPUT_METHOD_SERVIC 
E)); 
mgr.hideSoftInputFromWindow(v.getWindowToken(), 0); 
} 
} 
1

सरल तरीका:

InputMethodManager imm = (InputMethodManager)  
getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
1

टुकड़ा गतिविधि के लिए मेरे मामले में निम्न ठीक काम कर रहा है।

((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
     final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0); 
    } 

    @Override 
    public void onPageScrolled(int position, float offset, int offsetPixels) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 
}); 

अद्यतन: यह मेरा टुकड़ा गतिविधि है जहाँ से दो टुकड़े (CommentFragment, AnotherFragment) एक ViewPager

public class CommentActivity extends FragmentActivity { 
    ViewPager pager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     pager = (ViewPager) findViewById(R.id.viewPager); 
     ....... 
     ....... 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 

     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int pos) { 
      switch(pos) { 
       case 0: return CommentFragment.newInstance(); 
       default: return AnotherFragment.newInstance(); 
      } 
     } 

     @Override 
     public int getCount() { 
      return 2; 
     }  
    } 

} 

में खोल रहे हैं कीपैड CommentFragment में एक EditText के लिए दिखाई देते हैं और करना चाहते है, तो था अन्यफ्रैगमेंट पर स्विच करें और स्विच

public class CommentFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ......... 
     ......... 
     ......... 
     ((CommentActivity)getActivity()).pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(txtComment.getWindowToken(), 0); 
     } 

     @Override 
     public void onPageScrolled(int position, float offset, int offsetPixels) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
     } 
    }); 
} 
संबंधित मुद्दे