如何在Android cardView中实现“添加到收藏夹”按钮?

时间:2017-05-21 04:32:28

标签: android android-fragments android-cardview fragmentmanager

我有一个cardViews列表,其中包含两个textView(标题和内容)和一个切换按钮(这是一个最喜欢的按钮)。我想添加特定的cardview,其中togglebutton被检查到另一个片段“收藏夹”,以便用户可以查看喜欢的卡片。我该怎么办?  这是我的回收器适配器:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
        private ClipboardManager myClipboard;
        private ClipData myClip;
        private Context context;





        public List<CardItemModel> cardItems;

        public RecyclerAdapter(List<CardItemModel> cardItems){
            this.cardItems = cardItems;
        }

        public static class ViewHolder extends RecyclerView.ViewHolder{
            ImageView copyButton;
            ImageView shareButton;
            ToggleButton favButton;



            TextView title;
            TextView content;
            public ViewHolder(View itemView) {
                super(itemView);
                this.title = (TextView)itemView.findViewById(R.id.card_title);
                this.content = (TextView)itemView.findViewById(R.id.card_content);
                this.copyButton= (ImageView) itemView.findViewById(R.id.copyButton);
                this.shareButton=(ImageView) itemView.findViewById(R.id.shareButton);

                this.favButton=(ToggleButton) itemView.findViewById(R.id.favButton);

                favButton.setChecked(false);
                favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(), R.mipmap.ic_launcher));


            }
        }



        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item,parent,false);
            ViewHolder viewHolder = new ViewHolder(view);

            return viewHolder;
        }

        @Override
        public void onBindViewHolder(final ViewHolder holder, int position) {
            holder.title.setText(cardItems.get(position).title);
            holder.content.setText(cardItems.get(position).content);
            holder.copyButton.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v){


                    myClipboard = (ClipboardManager) v.getContext().getSystemService(Context.CLIPBOARD_SERVICE);


                    myClip = ClipData.newPlainText("label", holder.content.getText().toString());
                    myClipboard.setPrimaryClip(myClip);
                    Toast.makeText(v.getContext(), "Copied to clipboard" , Toast.LENGTH_SHORT ).show();

                }
            });
            holder.shareButton.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v){
                    Intent share = new Intent(Intent.ACTION_SEND);
                    share.setType("text/plain");
                    share.putExtra(Intent.EXTRA_TEXT, holder.content.getText().toString());
                    v.getContext().startActivity(Intent.createChooser(share, "Share Text"));
                }
            });

            holder.favButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
                @Override
                public void onCheckedChanged(CompoundButton favButton, boolean isChecked){
                    if (isChecked)
                        favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(),R.mipmap.ic_launcher));

                    else
                        favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(), R.mipmap.ic_cart));
                }
            });
        }

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

2 个答案:

答案 0 :(得分:0)

您可以将列表保存在数据库中。在表中添加一个布尔列(收藏夹)并将默认值设为false。当用户单击切换按钮时,在收藏夹列中将值设为true。现在,当您想显示喜欢的片段,然后从数据库中检索所有值,其中收藏列具有以下查询的真值

select * from table_name where favorite=true

然后将列表传递给适配器。

答案 1 :(得分:0)

所以,我直接提出的问题是,你有一张带有星形按钮的cardviews列表。当用户点击星形选项时,可以将卡片视图添加到另一个名为“收藏夹”的选项卡中,这样当用户切换到该选项卡时,他会看到他标记为收藏夹的所有卡片。我没有提供更多信息,因此我有一些情况。

场景1:您将数据存储在本地表中,并将另一列作为已加星标,以告知该记录是否已加星标。

现在,您可能正在从在线API获取数据,在这种情况下,您可以使用一个额外的列创建本地副本。

或者您可能从已存在的本地数据库中获取列表。在这种情况下,只需添加另一列。

现在,在您的收藏夹选项卡中,从数据库中获取所有收藏记录。

场景2:您不希望在本地存储数据,您希望动态地将cardview放入收藏夹选项卡。为此,请考虑以下结构。

MainActivity (tabLayout with pageViewer, implements StarListener)
- ContentFragment (recyclerView)
- FavoritesFragment (recyclerView)

interface StarListener
- void star(Item item);

我们在MainActivity中实现StarListener,并将实例保留在ContentFragment和contentFragment的recycler视图的适配器中。 单击cardview中的星形按钮,我们在适配器中调用此实例的星形方法。

在主要活动中,该方法将执行以下操作。获取收藏夹片段,并在FavoritesFragment的Recycler View中添加Item。

我没有把整个代码放在一起,因为我相信只要这样做,你就会知道实现它。

无论如何,我有它的工作代码。请随意给我打电话。

帮助解答的重要链接