有时局部变量的唯一目的是在assert()中检查它,就像这样 -
int Result = Func();
assert( Result == 1 );
Run Code Online (Sandbox Code Playgroud)
在Release版本中编译代码时,通常会禁用assert(),因此此代码可能会生成有关Result已设置但从未读取的警告.
可能的解决方法是 -
int Result = Func();
if ( Result == 1 )
{
assert( 0 );
}
Run Code Online (Sandbox Code Playgroud)
但它需要太多的打字,在眼睛上并不容易,并且导致总是检查条件(是的,编译器可以优化检查,但仍然).
我正在寻找一种替代方法来表达这个assert()的方式不会导致警告,但仍然易于使用并避免更改assert()的语义.
(在此区域代码中使用#pragma禁用警告不是一种选择,并且降低警告级别以使其消失也不是一种选择......).
单击复选框时,将触发默认的Android材质设计动画(从空白到“ V”标记,从“ V”标记到空白)。
我想确定动画何时结束。
根据文档,这应该可以通过以下两种方式之一实现:
选中或取消选中复选框(setOnCheckedChangeListener())时,获取当前的Animation对象(getAnimation()),并在其上注册一个侦听器(setAnimationListener())。不幸的是,这是行不通的-目前,Animation对象是null。
子类化Checkbox对象并实现其onAnimationEnd()方法。不幸的是,这还行不通-永远不会调用该方法。
我想念什么?确定这种默认动画何时结束的好方法是什么?我认为相关事件可以在活动中的其他视图上注册,但是我不知道是哪个。
这是第一种方法的相关代码段(动画始终为null)-
CheckBox checkBox = (CheckBox)findViewById(R.id.checkbox1);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
Animation animation = compoundButton.getAnimation();
Log.d("Checkbox", "Animation is " + animation);
}
});
Run Code Online (Sandbox Code Playgroud)