Android RecyclerView隱藏item(多佈局)的所在區域顯示空白
阿新 • • 發佈:2018-12-09
問題描述
由於需求,需要把recycler view的其中一個條目GONE掉,且該RecyclerView為多佈局狀態,複寫了getItemViewType()方法。若只是把內容隱藏,這樣就會出現一片空白區域,高度不會改變。
解決方法
把 item 的高度寬度設定為 0 ;顯示的時候再設定回來。
探究
網上的做法是,在onBindViewHolder裡呼叫該方法
//防止隱藏item出現空白
public void setVisibility(boolean isVisible, View itemView) {
RecyclerView.LayoutParams param = (RecyclerView.LayoutParams) itemView.getLayoutParams();
if (isVisible) {
param.height = RelativeLayout.LayoutParams.WRAP_CONTENT;// 這裡注意使用自己佈局的根佈局型別
param.width = RelativeLayout.LayoutParams.MATCH_PARENT;// 這裡注意使用自己佈局的根佈局型別
itemView.setVisibility(View.VISIBLE );
} else {
itemView.setVisibility(View.GONE);
param.height = 0;
param.width = 0;
}
itemView.setLayoutParams(param);
但是在我的專案裡會報異常
java.lang.NullPointerException: Attempt to write to field 'int android.view.ViewGroup$LayoutParams.height' on a null object reference
解決
若是修改為以下方法,則正常
//防止隱藏item出現空白
public void setVisibility(boolean isVisible, View itemView) {
RecyclerView.LayoutParams param = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
if (isVisible) {
param.height = RelativeLayout.LayoutParams.WRAP_CONTENT;// 這裡注意使用自己佈局的根佈局型別
param.width = RelativeLayout.LayoutParams.MATCH_PARENT;// 這裡注意使用自己佈局的根佈局型別
itemView.setVisibility(View.VISIBLE);
} else {
param.height = 0;
param.width = 0;
itemView.setVisibility(View.GONE);
}
itemView.setLayoutParams(param);
}