RecyclerView隐藏当前item时候,由于为了优化性能,只是把内容隐藏,但是高度不会改变,这样就会出现一片空白区域。
手动改变隐藏的item高度为0。
比如要隐藏下面xml代码item
这里给了一个方法把ll_item这个布局id传入即可
//防止隐藏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); }
package com.mandaotech.ewallet.android.ui.adapter; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.mandaotech.ewallet.R; import com.mandaotech.ewallet.android.ui.activity.elecaccount.AccountAddrlistQryActivity; import com.mandaotech.ewallet.android.ui.activity.elecaccount.AccountOccupationActivity; import com.mandaotech.ewallet.android.ui.activity.elecaccount.bean.AccountOccupationBean; import com.mandaotech.ewallet.android.ui.activity.elecaccount.bean.AddrlistQryBean; import com.mandaotech.ewallet.android.ui.activity.elecaccount.bean.AddrlistQryBean.AddlistQry; import java.io.Serializable; import java.util.List; /** * 省级市县 * Created by zst on 2018/7/12. */ public abstract class AccountAddrlistQryAdapter extends RecyclerView.Adapter{ private List list; private int selectId = 0; private Activity activity; private String searchKeyName = "";//搜索关键字 private String addrLevel;//跳出自动+1,如果进来的是4则关闭返回省级市县对象 public AccountAddrlistQryAdapter(Activity activity, List list, String addrLevel) { this.activity = activity; this.list = list; this.addrLevel = addrLevel; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_account_addrlist_qry, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, final int position) { holder.tv_column.setText(list.get(position).getAddrName()); holder.tv_column.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //setColumn(list.get(position).getOccupation()); int addrLevelInt = Integer.parseInt(addrLevel); if (addrLevelInt == 4) {//如果是最后一级直接关闭返回 Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putSerializable(AccountAddrlistQryActivity.INTENT_RESULT_ADDRLIST_QRY_BEAN, (Serializable) list.get(position)); intent.putExtras(bundle); intent.putExtra(AccountAddrlistQryActivity.INTENT_RESULT_CHECK_NAME, list.get(position).getAddrName()); activity.setResult(Activity.RESULT_OK, intent); activity.finish(); } else {//如果不是最后一级,向下一级跳转 setCheckName(list.get(position).getAddrName()); addrLevelInt = addrLevelInt + 1; Intent intent = new Intent(activity, AccountAddrlistQryActivity.class); intent.putExtra(AccountAddrlistQryActivity.INTENT_REQUEST_ADDR_CODE, list.get(position).getAddrCode()); intent.putExtra(AccountAddrlistQryActivity.INTENT_REQUEST_ADDR_LEVEL, addrLevelInt + ""); activity.startActivityForResult(intent, AccountAddrlistQryActivity.INTENT_REQUEST_CODE); } } }); if (list.get(position).getAddrName().contains(searchKeyName)) { setVisibility(true, holder.ll_item); } else { setVisibility(false, holder.ll_item); } } @Override public int getItemCount() { return list.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView tv_column; LinearLayout ll_item; public ViewHolder(View view) { super(view); tv_column = (TextView) view.findViewById(R.id.tv_column); ll_item = (LinearLayout) view.findViewById(R.id.ll_item); } } //防止隐藏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); } public String getSearchKeyName() { return searchKeyName; } public void setSearchKeyName(String searchKeyName) { this.searchKeyName = searchKeyName; } public abstract void setCheckName(String checkName); }