private Animator createAnimator(final View view,final int position){
MyAnimator ani = new MyAnimator();
ani.addListener(new AnimatorListener(){
@Override
priblic void onAnimationEnd(Animator arg0){
Log.d(TAG,"position:"+position);
}
});
return ani;
}
原因有以下兩個:匿名內部類的方法參數一定要設置final
在java中, 方法的內部類可以訪問方法中的局部變量,但必須用final修飾才能訪問。
比如下面這段代碼:
當方法被調用運行完畢之後,局部變量就已消亡了。但內部類對象可能還存在,直到沒有被引用時纔會消亡。此時就會出現一種情況,就是內部類要訪問一個不存在的局部變量。
解決辦法:
使用final修飾局部變量,通過將final局部變量"複製"一份,複製品直接作爲方法內部類中的數據成員,這事方法內部類訪問的其實是這個局部變量的複製品!而且,由於被final修飾的變量賦值後不能再修改,所以就保證了複製品與原始變量的一致。
Java採用了一種copy local variable(複製局部變量)的方式來實現,定義爲final的局部變量拷貝過來用,也就是說把定義爲final的局部變量拷貝過來用,而引用的也可以拿過來用,只是不能重新賦值。造成了可以access local variable(訪問局部變量)的假象,而這個時候由於不能重新賦值。
使用final修飾符不僅會保持對象的引用不會改變,而且編譯器還會持續維護這個對象在回調方法中的生命週期。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.