[英]How to show and hide view in recycler view in Android?
在我的應用程序中,我正在使用回收器視圖。我想在特定條件下顯示和隱藏視圖。但是當我滾動回收器視圖時,我沒有得到預期的行為。當我看到一個視圖時,它隨機可見其他行。 我所理解的是,它在回收時重新使用視圖,當前一個視圖被回收時,它會找到該視圖的可見性。如何在特定條件下隱藏視圖? 這是我的適配器代碼
@Override
public void onBindViewHolder(UrduRhymesViewHolder holder, int position) {
RhymesModel current = mUrduRhymesList.get(position);
AppUtility.setCustomFont(mContext, holder.tvUrduRhymesName, Constants.HANDLEE_REGULAR);
holder.tvUrduRhymesName.setText(current.getRhymeName());
holder.ivUrduRhymesLogo.setImageUrl(current.getThumbnailUrl(), mImageRequest);
int status = AppUtility.getFavouriteStatus(mContext, current.getRhymeName(), new UrduRhymesDb(mContext));
if (status == 0)
holder.btnFavourite.setBackgroundResource(R.mipmap.btn_star_unactive);
else
holder.btnFavourite.setBackgroundResource(R.mipmap.btn_star);
ProgressbarDetails progressbarDetails = ProgressbarDetails.getProgressDetail(current.getRhymeName());
if (progressbarDetails == null) {
progressbarDetails = new ProgressbarDetails();
progressbarDetails.prgProgressBar = holder.pbRhymeDownload;
progressbarDetails.download_btn_settings = holder.downloadButtonLayout;
} else {
progressbarDetails.prgProgressBar = holder.pbRhymeDownload;
progressbarDetails.download_btn_settings = holder.downloadButtonLayout;
holder.pbRhymeDownload.setProgress(progressbarDetails.progress);
}
ProgressbarDetails.addUpdateProgressDetail(current.getRhymeName(), progressbarDetails);
if (progressbarDetails != null && progressbarDetails.isDownloading) {
Log.e("test","downloading foe position "+position );
holder.downloadButtonLayout.setBackgroundResource(R.mipmap.btn_download);
holder.pbRhymeDownload.setVisibility(View.VISIBLE);
holder.pbRhymeDownload.setProgress(progressbarDetails.progress);
} else {
Log.e("test","should not be visible for position "+position);
holder.pbRhymeDownload.setVisibility(View.GONE);
}
}
這里progressbarDetails.isDownloading(值為true)是我想要顯示我的視圖的標准,但是else子句它沒有隱藏我的視圖
編輯:這里ProgressbarDetails(Singleton)是適配器進度條每一行的類保持參考。
沒有直接隱藏和取消隱藏recylerview子項的方法。
解決方案:我們假設recyclerview適配器是ArrayList現在再做一個arraylist(temp_list)
場景:
隱藏:遍歷適配器項並刪除要隱藏的項。 將其中的每一個放入temp_list。 迭代結束后,調用notifyDataSetChanged()
顯示:遍歷您的temp_list項目並刪除您想要顯示的項目。 將其中的每一個放入適配器。 迭代結束后,調用notifyDataSetChanged()
您應該在viewHolder中添加一個標志,指示是否應顯示此視圖。 並在onBindViewHolder中每次都檢查此標志。
因為recyclerView重用相同的視圖,你應該根據viewHolder中每個視圖的特殊內容做出決定。
你的意思是你的數據被更改了嗎? 你的布局想要改變?
adapter.notifyDataSetChanged();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.