簡體   English   中英

如何在Android中的回收站視圖中顯示和隱藏視圖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM