我对这个代码有一个问题:
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
//noinspection deprecation
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
getDefaultIntent();
}
});我希望将此代码转换为使用如下所示的lambda表达式:
view.getViewTreeObserver().addOnGlobalLayoutListener(()->{
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
//noinspection deprecation
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
getDefaultIntent();
});但是它不起作用,因为现在this不引用内部类。
发布于 2015-09-26 01:44:43
根据Java规范,
this在lambda主体中表示的值与this在周围上下文中表示的值相同。
因此,如果需要使用this来引用匿名对象,则需要使用显式匿名对象,而不是lambda。所做的工作是像编写原始代码一样编写它。
Lambda是一个在很多情况下都很有用的工具,但不需要在所有情况下都使用。
发布于 2015-09-26 01:05:56
试着通知参数,这个的“完整地址”。
removeGlobalOnLayoutListener(this);就像这样:
removeGlobalOnLayoutListener(MainActivity.this);当然,你需要通知你的真名。
https://stackoverflow.com/questions/32792446
复制相似问题