Fragment如何調用所在Activity的dispatchTouchEvent(MotionEvent ev)函數


  上一篇博客中講過如何判斷軟鍵盤的彈出並隱藏http://www.cnblogs.com/thare1307/p/4617558.html

  其中hideKeyboard()函數放在Activity的dispatchTouchEvent(MotionEvent ev)函數中就可以完美地使用

  

public boolean dispatchTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		if(ev.getAction()==MotionEvent.ACTION_DOWN)
			if(hideKeyboard())
				return false;
		return super.dispatchTouchEvent(ev);
	}

   也就是說,如果Activity接受到down事件,就執行hideKeyboard(),並且如果返回true,也就是說鍵盤已經彈出並隱藏,此時返回false,不再把觸摸時間分發給子控件.但是如果在Fragment中,該如何使用父Activity的dispatchTouchEvent函數呢?

  第一想到接口.

  在父Activity中定義一個接口

  

public interface OnHideKeyboardListener{
		public boolean hideKeyboard();
	}

 接着再定義設置接口函數

public void setOnHideKeyboardListener(OnHideKeyboardListener onHideKeyboardListener){
		this.onHideKeyboardListener = onHideKeyboardListener;
	}

 當然,要先在Activity中加上

private OnHideKeyboardListener onHideKeyboardListener;

   在Fragment中覆寫onAttach函數

public void onAttach(Activity activity) {
	// TODO Auto-generated method stub
	OnHideKeyboardListener onHideKeyboardListener = new OnHideKeyboardListener() {
		@Override
		public boolean hideKeyboard() {
			// TODO Auto-generated method stub
			if(inputMethodManager.isActive(searchEditText)){
				getView().requestFocus();   
inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().
                     getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); return true; } return false; } }; ((TabFragment)getActivity()).setOnHideKeyboardListener(onHideKeyboardListener); super.onAttach(activity); }

   最后,在Acitivity中覆寫dispatchTouchEvent(MotionEvent)函數

public boolean dispatchTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		if(onHideKeyboardListener != null){
			if(ev.getAction() == MotionEvent.ACTION_DOWN){
				if(onHideKeyboardListener.hideKeyboard()){
					return false;  //不在分發觸控給子控件
				}
			}
		}
		return super.dispatchTouchEvent(ev);
	}

   這樣,在Fragment中,鍵盤彈出來,只要手指一觸摸屏幕,鍵盤就能消失,並且不會觸發子控件的觸摸事件.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM