RecyclerView线性布局定义高度

今天在学习RecyclerView时,发现了一个问题,当我将RecyclerView嵌套在ScrollView中,为了防止点击冲突,对线性RecyclerView设置了setNestedScrollingEnable(false),此方法是防止ScrollView和RecyclerView的点滑动冲突,由于线性RecyclerView包含有多条记录,而此时只显示部分记录,很明显显示不完全。

          为了解决此问题,对线性RecyclerView进行高度定义:

          1.直接定义RecyclerView的高度

          前提:已知RecyclerView的记录的条数

          具体操作:直接在布局文件中把RecyclerView的高度定义上
<android.support.v7.widget.RecyclerView
     android:id="@+id/rv_list"
    android:layout_width="match_parent" android:layout_height="300dp">
</android.support.v7.widget.RecyclerView>
          2.手动计算RecyclerView的高度

          前提:不知道RecyclerView的记录的条数

          具体操作:(1)计算ItemView的高度

                           (2)计算ItemView的数量

                           (3)ItemViewHeight * ItemViewNum =RecyclerViewHeight 

public class MusicLinearAdapter extends RecyclerView.Adapter<MusicLinearAdapter.ViewHolder> {
    private Context context;
    private View mItemView;
    private RecyclerView mRv;
    private boolean isCalHeight = false;
    int itemCount;

    public MusicLinearAdapter(Context context
            , RecyclerView mRv) {
        this.context = context;
        this.mRv = mRv;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        mItemView = LayoutInflater.from(context).inflate(R.layout.activity_table_recyclerview, viewGroup, false);
        return new ViewHolder(mItemView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        setRecyclerViewHeight();
    }

    @Override
    public int getItemCount() {
        return 8;
    }

    /**
     * 手动计算RecyclerView的高度 * 步骤: * 1.获取ItemView的高度 * 2.ItemView的数量 *
     * 3.两者相乘得出RecyclerView的高度
     */
    private void setRecyclerViewHeight() { //避免多次计算
        if (isCalHeight) {
            return;
        }
        isCalHeight = true; //获取ItemView的高度
        RecyclerView.LayoutParams itemview_layoutParams = (RecyclerView.LayoutParams) mItemView.getLayoutParams();
        //获取ItemView的数量 int
        itemCount = getItemCount(); //两者相乘得出RecyclerView的高度
       int recyclerViewHeight = itemCount * itemview_layoutParams.height; //设置RecyclerView的高度
        LinearLayout.LayoutParams rvmview_ayoutParams = (LinearLayout.LayoutParams) mRv.getLayoutParams();
        rvmview_ayoutParams.height = recyclerViewHeight;
        mRv.setLayoutParams(rvmview_ayoutParams);
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章