如何在Android中的回收站视图中显示和隐藏视图?

时间:2016-01-06 08:38:22

标签: 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)是适配器进度条每一行的类保持参考。

3 个答案:

答案 0 :(得分:4)

无法直接隐藏和取消隐藏recylerview子项目。

解决方案: 我们假设recyclerview适配器是ArrayList 现在制作另一个arraylist(temp_list)

方案:

隐藏:遍历适配器项并删除要隐藏的项。将其中的每一个放入temp_list。迭代结束后,请致电notifyDataSetChanged()

显示:遍历您的temp_list项目并删除您想要显示的项目。将其中的每一个放入适配器。迭代结束后,请致电notifyDataSetChanged()

答案 1 :(得分:1)

您应该在viewHolder中添加一个标志,指示是否应显示此视图。并且每次在onBindViewHolder上检查此标志。

因为recyclerView重复使用相同的视图,你应该根据viewHolder中每个视图的特殊内容做出决定。

答案 2 :(得分:0)

你的意思是你的数据被更改了吗? 你的布局想要改变?

adapter.notifyDataSetChanged();