2010-04-02 51 views
3

我有一個GridView,其中每行都有一個自定義視圖。網格視圖適配器有一個保存自定義視圖的數組。GridView行刪除和動畫 - Android

點擊一個按鈕,我想從網格中刪除一個特定的行,同時這樣做我想要動畫。我有一個AnimationListener。

當我從數組中刪除最上面一行並在onAnimationEnd()中設置了setAdapter時。它工作得很好。但是,當我刪除任何其他行時,它會在主線程中出現NullPointerException。

這裏是代碼片段:

Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.pushout); 
anim.setAnimationListener(animListener); 

public void removeRow() { 

final CustomRowView customRowView = rowArray.get(clickedId); 
customRowView.startAnimation(anim); 

//Remove the row clicked 
rowArray.remove(clickedId); 
} 

private AnimationListener animListener = new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      gameGrid.setAdapter(adapter); 
    } 
} 

異常線程如下:

ERROR/AndroidRuntime(11503): java.lang.NullPointerException 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1227) 
at android.widget.AbsListView.dispatchDraw(AbsListView.java:1319) 
at android.view.View.draw(View.java:5944) 
at android.widget.AbsListView.draw(AbsListView.java:2121) 
at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
at android.view.View.draw(View.java:5841) 
at android.widget.FrameLayout.draw(FrameLayout.java:352) 
at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
at android.view.View.draw(View.java:5841) 
at android.widget.FrameLayout.draw(FrameLayout.java:352) 
at android.view.ViewGroup.drawChild(ViewGroup.java:1486) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228) 
at android.view.View.draw(View.java:5841) 
at android.widget.FrameLayout.draw(FrameLayout.java:352) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1847) 
at android.view.ViewRoot.draw(ViewRoot.java:1217) 
at android.view.ViewRoot.performTraversals(ViewRoot.java:1030) 
at android.view.ViewRoot.handleMessage(ViewRoot.java:1482) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3948) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
at dalvik.system.NativeStart.main(Native Method) 

請幫助!

+0

請清楚你的問題?放一些代碼?很難得到你? – Praveen 2010-04-02 13:07:40

+0

嗨Praveen,我已經在問題中添加了我的代碼。請通過它。 – Pria 2010-04-05 08:43:26

回答

1

這是android.view.ViewGroup引發異常的代碼。我沒有看到你的代碼,但它看起來像你當你有空查看返回的行。

if ((flags & FLAG_USE_CHILD_DRAWING_ORDER) == 0) { 
     for (int i = 0; i < count; i++) { 
      final View child = children[i]; 
/* line 1227 throws NullPointerException */ if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) { 
       more |= drawChild(canvas, child, drawingTime); 
      } 
     } 
    } else { 
     for (int i = 0; i < count; i++) { 
      final View child = children[getChildDrawingOrder(count, i)]; 
      if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) { 
       more |= drawChild(canvas, child, drawingTime); 
      } 
     } 
    }