我必须使用一个OnGlobalLayoutListener
对象,然后删除侦听器,我对使用以下代码解决的不推荐使用的方法存在问题。OnGlobalLayoutListener:弃用和兼容性
protected void onCreate(Bundle savedInstanceState) {
final LinearLayout llTotal = (LinearLayout) findViewById(R.id.mmc_ll);
ViewTreeObserver vto = llTotal.getViewTreeObserver();
if(vto.isAlive()){
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//
// mycode
//
if (Build.VERSION.SDK_INT<16) {
removeLayoutListenerPre16(llTotal.getViewTreeObserver(),this);
} else {
removeLayoutListenerPost16(llTotal.getViewTreeObserver(), this);
}
}
});
}
super.onCreate(savedInstanceState);
}
@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeGlobalOnLayoutListener(listener);
}
@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeOnGlobalLayoutListener(listener);
}
它是正确的吗?有更好的方法来处理兼容性?
与API 10运行代码在模拟器我在logcat的
04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 09:30:12.565: W/dalvikvm(471): VFY: unable to resolve virtual method 2950: Landroid/view/ViewTreeObserver;.removeOnGlobalLayoutListener (Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V
以下警告我能不理会他们的我必须以某种方式来解决?
在开始的时候我用了你的代码,但它给一个错误(调用API需要16级(当前分钟8):android.view.ViewTreeObserver#removeOnGlobalLayoutListener)和警告(该方法removeGlobalOnLayoutListener(ViewTreeObserver.OnGlobalLayoutListener )从类型ViewTreeObserver被弃用)。我的代码解决了这些问题,但给LogCat警告 – crbin1 2013-04-24 12:09:30
警告是好的。这是因为你正在使用jar版本的某些sdk版本,并为设备
2013-04-24 14:22:34
@ crbin1如果您希望避免看到此警告/错误,您可以在函数声明之前添加@TargetApi(Build.VERSION_CODES.JELLY_BEAN)。 – 2013-07-02 07:53:50