今天在学习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 

          具体代码:
package com.musicplaer.eminemmusic.adapters; import android.content.Context;
import android.support.annotation.NonNull; import
android.support.v7.widget.RecyclerView; import android.view.LayoutInflater;
import android.view.View; import android.view.ViewGroup; import
android.widget.LinearLayout; import com.musicplaer.eminemmusic.R; public class
MusicLinearAdapter extends RecyclerView.Adapter<MusicLinearAdapter.ViewHolder>
{ private Context context; private View mItemView; private RecyclerView mRv;
private boolean isCalHeight = false; 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.item_list_music,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); } } }
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信