更改父布局的高度会更改其中的视图的高度

时间:2015-03-29 12:41:51

标签: android android-layout android-view android-recyclerview

我在FrameLayout中有2个LinearLayouts作为recyclerView的项目。

我希望FrameLayout具有上面的LinearLayout的大小,当我单击FrameLayout时,我设置了下面的LinearLayout的translateY,这样你就看不到它,然后我将它设置为动画。 为了实现这一点,我将FrameLayout的高度设置为高于以下布局的高度:

        holder.llAbove.post(new Runnable() {
        @Override
        public void run() {
            holder.flContent.getLayoutParams().height = holder.llAbove.getHeight();
            holder.flContent.requestLayout();
        }
    });

当我按下它时,我设置下面的布局的translationY并将其设置为动画。 当下面布局的大小固定时,这很有用,但当我将它的高度设置为wrap_content时,下面布局的高度变为主FrameLayout的大小,这会使一切都搞砸。

我尝试更改整个布局参数而不仅仅是这样的高度:

        holder.llAbove.post(new Runnable() {
        @Override
        public void run() {
            FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT,holder.llAbove.getHeight());
            holder.flContent.setLayoutParams(layoutParams);
        }
    });

然后我得到了这个例外:

03-29 15:36:22.919    4298-4298/com.example.itayrabin.layouttest E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.itayrabin.layouttest, PID: 4298
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams

当我将布局参数更改为RecylcerView.LayoutParms时:

        holder.llAbove.post(new Runnable() {
        @Override
        public void run() {
            RecyclerView.LayoutParams layoutParams = new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT,holder.llAbove.getHeight());
            holder.flContent.setLayoutParams(layoutParams);
        }
    });

我得到这个空引用异常:

03-29 15:38:10.554    4359-4359/com.example.itayrabin.layouttest E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.itayrabin.layouttest, PID: 4359
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference

我尝试过任何我能想到的事情。

任何人都可以帮助我吗?

0 个答案:

没有答案