根据条件在回收站视图中仅显示某些项目

问题描述 投票:0回答:1

我有一个recycleview,显示了从托管在服务器上的audios.json文件获取的音频文件列表。我有一个带有getter方法getLanguage()的模型类,以查看音频语言。我只想在回收视图中显示用户偏好的音频文件。举例来说,如果用户只想要英语和俄语,我只想显示俄语和英语列表。我们怎样才能做到这一点?现在,将显示整个列表。

public class AudioAdapter extends  RecyclerView.Adapter<AudioAdapter.HomeDataHolder> {

int currentPlayingPosition = -1;

Context context;
ItemClickListener itemClickListener;

List<Output> wikiList;

public AudioAdapter(List<Output> wikiList, Context context) {
    this.wikiList = wikiList;
    this.context = context;
}



@NonNull
@Override
public HomeDataHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.audio_row_layout,viewGroup,false);
    HomeDataHolder mh = new HomeDataHolder(view);
    return mh;
}

@Override
public void onBindViewHolder(@NonNull final HomeDataHolder homeDataHolder, int i) {
    String desc = wikiList.get(i).getLanguage() + " • " + wikiList.get(i).getType();
    homeDataHolder.tvTitle.setText(wikiList.get(i).getTitle());
    homeDataHolder.tvotherinfo.setText(desc);
    homeDataHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (itemClickListener != null)
                itemClickListener.onClick(view,homeDataHolder.getAdapterPosition());
        }
    });


    homeDataHolder.rippleLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (itemClickListener != null)
                itemClickListener.onClick(view,homeDataHolder.getAdapterPosition());
        }
    });



}

@Override
public int getItemCount() {
    return wikiList.size();
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
    return position;
}

public void setClickListener(ItemClickListener itemClickListener) {    //  Method for setting clicklistner interface
    this.itemClickListener = itemClickListener;

}

public class HomeDataHolder extends RecyclerView.ViewHolder {

    TextView tvTitle,tvotherinfo;
    MaterialRippleLayout rippleLayout;

    public HomeDataHolder(View v) {
        super(v);
        this.tvTitle = v.findViewById(R.id.title);
        this.tvotherinfo = v.findViewById(R.id.audioDesc);
        this.rippleLayout = v.findViewById(R.id.ripple);
    }

  }

}
android android-recyclerview android-adapter android-json
1个回答
0
投票

一般的想法应该是:

  1. 您有一个包含所有项目的列表
  2. 您有用户选择的过滤规则
  3. 您从数字1中筛选出项目,以查看符合限制条件的项目并将其存储在另一个列表中。

然后回收者视图仅显示数字3中的列表项目。

这意味着回收者视图的getItemCount将返回过滤列表的大小,而不是整个列表的大小。

© www.soinside.com 2019 - 2024. All rights reserved.