从LinearLayout中删除子视图

时间:2018-06-10 15:55:35

标签: android android-animation android-linearlayout android-view

我有包含一些视图的垂直LinearLayout。在点击视图的按钮上,我发送一些请求,并在响应中从动画布局中删除视图(xml中为animateLayoutChanges="true")。当布局中只剩下一个视图时,我禁用布局更改动画。删除最后一个视图后,我隐藏了布局并将另一个布局设置为可见。

couponsListLayout.addOnLayoutChangeListener(new OnLayoutChangeListener() {
        @Override
        public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
                switch (couponsListLayout.getChildCount()) {
                case 1:
                        //disable layout disappear animation if one coupon left
                        couponsListLayout.getLayoutTransition().disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
                        break;
                case 0:
                        //hide coupons layout if nothing to clip
                        if (itemsExists()) {
                                hideCouponsLayout();
                        } else {
                                showEmptyLayout();
                        }
                        break;
                }
        }
});

以下是我点击查看按钮

的操作
public void clipCoupon(final Coupon coupon, final StatusCouponView couponView, CouponClipSource source) {
    if (JBrainServer.transactionBeginned()) {
        Session.clipCoupon(coupon.id, new OnServerDoneListener() {
            @Override
            public void onDone(final int code, final byte[] body) {
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        if (code == 204) {
                            removeCoupon(couponView, coupon);
                        } else {
                            if (couponView != null) {
                                couponView.stopClipAnimation();
                            }
                            listener.onClipError(code, body);
                        }
                    }
                });
            }
        }, source);
    } else {
        removeCoupon(couponView, coupon);
    }
}

public void removeCoupon(final StatusCouponView couponView, Coupon coupon) {
    couponsListLayout.removeView(couponView);
    clippedCouponsTargets.add(coupon.targetOfferId);
    clippedCouponsIds.add(coupon.id);
    if (sessionCoupons != null && !sessionCoupons.isEmpty()) {
        Session.removeCoupon(coupon);
        if (!sessionCoupons.isEmpty() && couponsListLayout.getOrientation() == LinearLayout.HORIZONTAL) {
            Coupons.sendAnalytics(sessionCoupons.get(0), CouponAnalytics.Action.IMPRESSION);
        }
    }
}

这是布局

<LinearLayout
    android:id="@+id/view_status_coupons_list_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="@dimen/main_view_status_coupons_layout_margin"
    android:animateLayoutChanges="true"
    android:orientation="vertical" />

当我逐个点击视图时,它可以正常工作。

但是当我同时点击两个视图时,disableTransitionType由于某种原因没有被调用,并且即将到来的视图设置错误(我得到了空白屏幕)。

如何在同时点击两个视图时处理这种情况,并在删除最后一个视图之前始终设置disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING)

0 个答案:

没有答案