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);
        }
    }
}

 

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