Android RecyclerView隐藏item的所在区域显示空白
生活随笔
收集整理的這篇文章主要介紹了
Android RecyclerView隐藏item的所在区域显示空白
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
說明:
RecyclerView隱藏當(dāng)前item時(shí)候,由于為了優(yōu)化性能,只是把內(nèi)容隱藏,但是高度不會(huì)改變,這樣就會(huì)出現(xiàn)一片空白區(qū)域。
解決方法:
手動(dòng)改變隱藏的item高度為0。
代碼:
比如要隱藏下面xml代碼item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_item"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/white"android:orientation="vertical"><TextViewandroid:id="@+id/tv_column"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:textColor="@color/font_4A4A4A"android:text="欄目名"android:textSize="12sp" /><Viewandroid:layout_width="match_parent"android:layout_height="0.3dp"android:background="@color/line_dddddd"/> </LinearLayout>這里給了一個(gè)方法把ll_item這個(gè)布局id傳入即可
//防止隱藏item出現(xiàn)空白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;/*** 省級(jí)市縣* Created by zst on 2018/7/12.*/ public abstract class AccountAddrlistQryAdapter extends RecyclerView.Adapter<AccountAddrlistQryAdapter.ViewHolder> {private List<AddrlistQryBean.AddlistQry> list;private int selectId = 0;private Activity activity;private String searchKeyName = "";//搜索關(guān)鍵字private String addrLevel;//跳出自動(dòng)+1,如果進(jìn)來的是4則關(guān)閉返回省級(jí)市縣對(duì)象public AccountAddrlistQryAdapter(Activity activity, List<AddrlistQryBean.AddlistQry> list, String addrLevel) {this.activity = activity;this.list = list;this.addrLevel = addrLevel;}@Overridepublic 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);}@Overridepublic void onBindViewHolder(ViewHolder holder, final int position) {holder.tv_column.setText(list.get(position).getAddrName());holder.tv_column.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//setColumn(list.get(position).getOccupation());int addrLevelInt = Integer.parseInt(addrLevel);if (addrLevelInt == 4) {//如果是最后一級(jí)直接關(guān)閉返回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 {//如果不是最后一級(jí),向下一級(jí)跳轉(zhuǎn)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);}}@Overridepublic 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出現(xiàn)空白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); }?
總結(jié)
以上是生活随笔為你收集整理的Android RecyclerView隐藏item的所在区域显示空白的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 去掉字符串首尾空格
- 下一篇: 民宿管理系统的分析与设计