怎么在RecyclerView中动态加载和移除控件,并且RecyclerView的宽高保持自适应!
澳门新葡京官网
澳门新葡京官网
当前位置 : 澳门新葡京官网 > 网上赌博新址

怎么在RecyclerView中动态加载和移除控件,并且RecyclerView的宽高保持自适应!

我准备实现如题所述的效果,我使用了ViewStub,但是发现存在一些问题,比如ViewStub只能加载一个新布局,RecyvlerView能够自适应,但ViewStub却不能移除它的布局,只能设置隐藏,隐藏之后RecyclerView并不能回到原来的宽高。我自己写了一个简陋的demo来尝试。


代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/expendContainer"
    android:background="@color/colorAccent">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary">
        <TextView
            android:id="@+id/expendItem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="24sp"
            android:text="展开"/>
        <ToggleButton
            android:gravity="center"
            android:id="@+id/expendToggleButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <ViewStub
        android:id="@+id/expendView"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:background="@color/colorPrimaryDark"
        android:layout="@layout/expend_view"/>

</LinearLayout>

上面是item布局的代码
主布局就只是RecyclerView。
然后ManActivity的代码很简单仅仅是加载RecyclerView而已。
下面是adapter的代码:

public class ExpendRecyclerAdapter extends RecyclerView.Adapter<ExpendViewHolder> {
    public Context mContext;
    private View view;
    public ExpendRecyclerAdapterContext context {
        mContext = context;
    }

    @Override
    public ExpendViewHolder onCreateViewHolderViewGroup parent, int viewType {
        view = LayoutInflater.frommContext.inflateR.layout.expend_item,parent,false;
        ExpendViewHolder expendViewHolder = new ExpendViewHolderview;
        return expendViewHolder;
    }

    @Override
    public void onBindViewHolderfinal ExpendViewHolder holder, final int position {
        holder.expendItem.setText"需要展示的数据";
        holder.expendToggleButton.setOnClickListenernew View.OnClickListener {
            @Override
            public void onClickView v {
                if holder.expendToggleButton.isChecked{
                    holder.expendView.setVisibilityView.VISIBLE;

                }else {
                    holder.expendView.setVisibilityView.INVISIBLE;
                 holder.expendContainer.removeViewholder.expendView;
                    notifyItemChangedposition;
                }

            }
        };

    }

    @Override
    public int getItemCount {
        return 1;
    }
}


效果如图:点击ToggleButton,加载布局

如果我不写notifyItemChangedposition;那么再点击的话,布局会被隐藏,但是宽高仍然不会改变,下面的粉红色布局部分不会消失。

如果我写了notifyItemChangedposition;再次点击,item刷新了一下,奇迹发生,下面的小粉红不见了!

但是当我再次开关,尽管item不断刷新,下面的粉红部分就再也不消失了,直到我转到其他Activity再转回来,小粉红消失。

也就是说,不管是第一次notifyItemChangedposition;刷新Recycler时粉红部分消失,还是进入后台再进入前台时粉红部分的消失,都表示,RecyclerView是可以适应item内容的动态变化而动态变化的。
但是我现在思路受阻,希望有大神能够指点一下!

新版本的recyclerview有个新特性,是会动态计算item的宽高。不知道有没有帮助。
http://kingideayou.github.io/2016/03/01/recycler_view_23.2/

如果有空的话我尝试一下这个方案:http://www.jianshu.com/p/9165249da2fa

栏目列表

广告位

澳门新葡京官网