如何仅从recyler视图中列出所选项目,并仅将这些项目设置为要显示的适配器

时间:2017-11-26 11:48:39

标签: android android-recyclerview android-adapter

public class BlogFeedAdapter extends RecyclerAdapter.BaseRecycleViewAdapter<BlogFeedVO, BlogFeedAdapter.ViewHolder> {
    LayoutInflater mInflater;
    int mDefaultProfileRes;
    Activity mActivity;

    public BlogFeedAdapter(Activity activity) {
        super();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mDefaultProfileRes = R.drawable.ic_person;
        } else {
            mDefaultProfileRes = R.mipmap.ic_placeholder;
        }
        this.mActivity = activity;
    }

    @Override
    protected ViewHolder createView(ViewGroup pareGroup, int viewType) {
        if (mInflater == null) {
            mInflater = LayoutInflater.from(pareGroup.getContext());
        }
        View view = mInflater.inflate(R.layout.blog_feed_item_layout, pareGroup, false);
        ViewHolder holder = new ViewHolder(view);
        holder.mContentView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                BlogFeedVO item = (BlogFeedVO) view.getTag();
                Bundle data = new Bundle();
                data.putParcelable(Constants.DATA, item);
                AppModule.getmModule().dispatchEvent(new CoreEvent(Constants.BLOG_FEED_CLICKED_EVENT, data));
            }
        });
        holder.mLikeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                BlogFeedVO feedVO = (BlogFeedVO) view.getTag();
                feedVO.setmLikedInFeed(!feedVO.ismLiked());
                notifyDataSetChanged();

                Bundle data = new Bundle();
                data.putParcelable(Constants.DATA, feedVO);
                AppModule.getmModule().dispatchEvent(new CoreEvent(Constants.BLOG_FEED_LIKE_CLICKED_EVENT, data));
            }
        });
        holder.mShareButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String id = (String) view.getTag();
                String url = CoreLib.getmPropertyReader().readProperty(Constants
                        .AppConfig.INSTANT_ARTICLE_BASE_URL) + id;
                ShareLinkContent content = new ShareLinkContent.Builder()
                        .setContentUrl(Uri.parse(url))
                        .build();
                ShareDialog shareDialog = new ShareDialog(mActivity);
                shareDialog.show(content, ShareDialog.Mode.AUTOMATIC);
            }
        });
        return holder;
    }

    @Override
    protected void updateView(ViewHolder viewHolder, final BlogFeedVO item) {
        viewHolder.mTitle.setText(item.getmName());
        ImageLoadUtils.loadWith(AppModule.getmModule(), item.getmImageUrl(), viewHolder.mImageView);
        viewHolder.mTime.setText(item.getFormattedCreateAtTime());
        viewHolder.mContentView.setTag(item);
        ImageLoadUtils.loadWith(AppModule.getmModule(), item.getmAuthorVO().getmProfileImage(),
                viewHolder.mProfileImage, mDefaultProfileRes, mDefaultProfileRes);
        viewHolder.mAuthorName.setText(item.getmAuthorVO().getmName());
        viewHolder.mLikeCount.setText(item.getmLikeCount()+"");
        viewHolder.mViewCount.setText(item.getmViewCount()+"");
        viewHolder.mLikeButton.setSelected(item.ismLiked());
        viewHolder.mLikeButton.setTag(item);
        viewHolder.mShareButton.setTag(item.getmId());
    }

    static class ViewHolder extends RecyclerAdapter.ViewHolder{
        ImageView mImageView;
        TextView mTitle;
        TextView mTime;
        View mContentView;

        TextView mAuthorName;
        CircleImageView mProfileImage;

        TextView mViewCount;
        TextView mLikeCount;
        AppCompatImageView mLikeButton;
        AppCompatImageView mShareButton;

        /**
         * Constructor function
         *
         * @param itemView the enclosing view
         */
        public ViewHolder(View itemView) {
            super(itemView);
            mContentView = itemView.findViewById(R.id.content_view);
            mImageView = itemView.findViewById(R.id.feed_imageview);
            mTitle = itemView.findViewById(R.id.feed_title);
            mTime = itemView.findViewById(R.id.time_text);
            mAuthorName = itemView.findViewById(R.id.author_name);
            mProfileImage = itemView.findViewById(R.id.profile_image);

            mViewCount = itemView.findViewById(R.id.view_count);
            mLikeCount = itemView.findViewById(R.id.like_count);
            mLikeButton = itemView.findViewById(R.id.like_button);
            mShareButton = itemView.findViewById(R.id.share_button);
        }
    }
}

This is the adapter class.

and this is in the activity extending adapter class
    @Override
    protected void onBindView() {
        addViewEvents();
        mAdapter = new BlogFeedAdapter(getActivity());
  
  mView.setAdapter(mAdapter);// setting the recylerview list to the adapter.
}

现在我想要一个过滤后的recyler视图,即只有mAuthorName匹配某个字符串的那些项目。那我怎么能这样做呢。能否请你帮忙。谢谢,谢谢。 这里创建的列表显示了一些文章,我想列出特定作者发布的文章。 基本上我的问题是如何在某种条件下获得过滤后的recylerview。

1 个答案:

答案 0 :(得分:0)

在适配器中添加新功能以更新列表

 public void updateList(List<DataHolder> list){
      displayedList = list;
      notifyDataSetChanged();
 }


void filter(String text){
 List<DataHolder> temp = new ArrayList();
 for(DataHolder d: displayedList){
       //or use .equal(text) with you want equal match
       //use .toLowerCase() for better matches
       if(d.getEnglish().contains(text)){
           temp.add(d);
       }
 }
 //update recyclerview
 disp_adapter.updateList(temp);
}

您可以应用此代码,其中&#34; text&#34;这是您想要过滤的艺术家姓名。

这是&#34; disp_adapter&#34;即回收适配器。

显示的列表是所有数据集的列表。