閱讀343 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android Fragment中監聽事件

問題:

Fragment中沒有提供監聽touch事件的方法。

解決方案:

Activity中能夠監聽touch事件。

於是在Activity中寫一個接口,MyOnTouchListener,在需要監聽touch事件的fragment中實現這個窗口。

在Activity中實現如下方法:

/**
* 以下的幾個方法用來,讓fragment能夠監聽touch事件
*/
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MyOnTouchListener>(
10);

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}

public void registerMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.add(myOnTouchListener);
}

public void unregisterMyOnTouchListener(MyOnTouchListener myOnTouchListener) {
onTouchListeners.remove(myOnTouchListener);
}

public interface MyOnTouchListener {
public boolean onTouch(MotionEvent ev);
}

dispatchTouchEvent 可以監聽所有的關於屏幕的行為。。。。。


在Fragment中實現如下代碼:

private GestureDetector mGestureDetector;

MainActivity.MyOnTouchListener myOnTouchListener;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

Log.e(TAG, "onCreateView");

View view = inflater.inflate(R.layout.fragment_contact, container,
false);
this.view = view;

mGestureDetector = new GestureDetector(getActivity(),
new SideIndexGestureListener());

listView = (ListView) view.findViewById(R.id.listview_contacts);
getDataFromSQLite();
spliceData();
showListView();

myOnTouchListener = new MainActivity.MyOnTouchListener() {

@Override
public boolean onTouch(MotionEvent ev) {
boolean result = mGestureDetector.onTouchEvent(ev);
return result;
}
};
((MainActivity) getActivity())
.registerMyOnTouchListener(myOnTouchListener);

return view;
}


最後更新:2017-04-03 12:55:27

  上一篇:go 2011藍橋杯【初賽試題】n進製小數
  下一篇:go 2011 藍橋杯【初賽試題】反轉串