日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android RecyclerView隐藏item的所在区域显示空白

發布時間:2024/3/24 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android RecyclerView隐藏item的所在区域显示空白 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明:

RecyclerView隱藏當前item時候,由于為了優化性能,只是把內容隱藏,但是高度不會改變,這樣就會出現一片空白區域。

解決方法:

手動改變隱藏的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>

這里給了一個方法把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<AccountAddrlistQryAdapter.ViewHolder> {private List<AddrlistQryBean.AddlistQry> list;private int selectId = 0;private Activity activity;private String searchKeyName = "";//搜索關鍵字private String addrLevel;//跳出自動+1,如果進來的是4則關閉返回省級市縣對象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) {//如果是最后一級直接關閉返回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);}}@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出現空白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); }

?

總結

以上是生活随笔為你收集整理的Android RecyclerView隐藏item的所在区域显示空白的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。