android - GridView 行删除和动画 - Android

标签 android gridview animation adapter

我有一个 GridView,其中每一行都有一个自定义 View 。 GridView 适配器有一个保存自定义 View 的数组。

单击一个按钮,我想从网格中删除一个特定的行,同时我想在它上面添加动画。我有一个 AnimationListener。

当我从数组中删除最上面的行并在 onAnimationEnd() 中设置 Adapter 时。它工作得很好。但是,当我删除任何其他行时,它会在主线程中给出 NullPointerException。

这是代码 fragment :

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)

请帮忙!!!

最佳答案

这是抛出异常的 android.view.ViewGroup 代码。我没有看到您的代码,但看起来当您抽出您返回空 View 的行时。

    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);
            }
        }
    }

关于android - GridView 行删除和动画 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2566113/

相关文章:

java - 从 FirebaseDatabase 为全局变量赋值

android - 如何通过java在gridview之间留出空间

GridView .DataBind RowDataBound 未触发

java - 如何构建API接口(interface)进行改造?

android - 重复一个有时间延迟的任务?

android - 无法使用共享首选项完成 Activity 并应用条件进行另一项 Activity

php - yii2:jquery 如果 gridview 列包含特定值则更改颜色

jquery - 创建类似 Flipboard 仪表板图像翻转的网络动画

ios - 如何在 Swift 中调整动画速度?

javascript - 动画化容器中的元素以动画化并包含 100% 的容器