23

Ich habe eine ViewPager + ActionBar mit Tabs. Ich möchte die Soft-Tastatur ausblenden lassen, wenn ich zu einem anderen Tab "swipe", aber ich kann nicht herausfinden, wie.Softkey programmatisch in ViewPager.OnPageChangeListener onPageSelected() ausblenden?

Ich habe für die FragmentPageAdapter an den Konstruktor in meiner Aktivität geführt, so kann ich

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

nennen Aber es macht nichts (und es ist in einem erreichbaren Bereich des Codes) ... Hilfe?

+0

/* verbergen Soft-Tastatur ausgeblendet * ./\t in einer Zeile: '(. (InputMethodManager) getActivity() getSystemService (Context.INPUT_METHOD_SERVICE)) hideSoftInputFromWindow (view.getWindowToken(), 0);' –

Antwort

35

In Ihrer Aktivität können Sie Folgendes tun:

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

Danke, es hat funktioniert. Ich musste meinen viewPager als Ansicht verwenden und activity.getSystemService ausführen, aber der Prozess war erfolgreich – snotyak

+1

In einer Zeile: '((InputMethodManager) getActivity(). GetSystemService 0); –

+2

Sie können die Ansicht für den Ansichtspager festlegen, so dass Sie sie verwenden können, ohne eine Sicht zu finden: imm.hideSoftInputFromWindow (mViewPager.getWindowToken(), 0); – TacoEater

30

ich onPageSelected() weil die mit der Durchzug Animation Animations-Schrauben hide-Tastatur nicht verwenden. Statt onPageScrollStateChanged() verwenden:

@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

Viel bessere Lösung, kein Animationsfehler. Tank dich! – azendh

+1

Diese Antwort ist besser als die angenommene Antwort. Vielen Dank. – Murat

5

Häufige Art und Weise:

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

einfache Art und Weise:

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

In meinem Fall für Fragment Aktivität folgt adaequat.

((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) { 
    } 
}); 

UPDATE: Das war mein Fragment Aktivität von denen zwei Fragmente (CommentFragment, AnotherFragment) in einem 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; 
     }  
    } 

} 

öffnen Wenn Tastatur für eine EditText in CommentFragment erscheinen und wollen umschalten auf AnotherFragment und will Tastatur zum Zeitpunkt des Schalters

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) { 
     } 
    }); 
} 
Verwandte Themen