我试图在一个简单的Android应用程序上检测一个fling事件,但第一个MotionEvent参数始终为null.为什么使用null参数调用onFling方法?在Android文档说,当一个一扔事件上下来MotionEvent初始和匹配起来MotionEvent发生时被调用.
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// e1 always == null, return early a null reference exception
if (e1 == null) {
return false;
}
if (e1.getY() - e2.getY() > 120) {
handleFlingEvent();
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
主Activity有这个onTouchEvent方法:
GestureDetector flingDetector = new GestureDetector(new MyGestureDetector());
@Override
public boolean onTouchEvent(MotionEvent event) {
if (flingDetector.onTouchEvent(event)) {
return true;
}
return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud) 在阅读Jon Skeet的" Odd query expressions "后,我尝试了下面的代码.我期望最后的LINQ查询转换为int query = proxy.Where(x => x).Select(x => x);不编译因为Where返回一个int.代码编译并将"Where(x => x)"打印到屏幕并将查询设置为2.从不调用Select,但需要在那里编译代码.怎么了?
using System;
using System.Linq.Expressions;
public class LinqProxy
{
public Func<Expression<Func<string,string>>,int> Select { get; set; }
public Func<Expression<Func<string,string>>,int> Where { get; set; }
}
class Test
{
static void Main()
{
LinqProxy proxy = new LinqProxy();
proxy.Select = exp =>
{
Console.WriteLine("Select({0})", exp);
return 1;
};
proxy.Where = exp =>
{
Console.WriteLine("Where({0})", exp);
return 2;
};
int query = from …Run Code Online (Sandbox Code Playgroud)