当前位置: 首页 > 知识库问答 >
问题:

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

国仰岳
2023-03-14

我有一个卡片视图列表,其中包含两个文本视图(标题和内容)和一个切换按钮(这是一个最喜欢的按钮)。我想添加特定的卡片视图,其中切换按钮被选中到另一个片段“最喜欢的”,以便用户可以查看最喜欢的卡片。我怎么做呢?这是我的回收适配器:

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个答案

解飞语
2023-03-14

所以,我从这个问题中直接得到的是,你有一个带有星形按钮的CardView列表。当用户点击星型选项时,cardview可能会被添加到另一个名为“收藏夹”的选项卡中,这样当用户切换到该选项卡时,他就会看到他标记为收藏夹的所有卡片。由于你没有提供更多的信息,我在考虑某些情况。

场景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中的星形按钮,我们在适配器中调用该实例的星形方法

在主活动中,该方法将执行以下操作。获取收藏夹片段,并在收藏夹片段的回收器视图中添加项目。

我没有把整个代码都放进去,因为我相信,如果有办法做到这一点,你会知道足够多来实现它。

无论如何,我都有它的工作代码。请随便找我。

有助于解答问题的重要链接

  • 从ViewPager中检索片段
景德海
2023-03-14

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

select * from table_name where favorite=true

然后将列表传递给适配器

 类似资料:
  • 问题内容: 我正在使用Drupal构建网站。在每个页面的标题上,我希望有一个图像(由我自己设计),它将用作自定义“添加到收藏夹”按钮。单击图像应将网站的URL添加到用户浏览器的收藏夹(书签)中。这适用于所有浏览器,IE7 +,FF,Opera,Chrome。我在网上找不到很多信息。我想javascript应该能胜任工作,但是我在Javascript方面没有太多经验:)所以我需要您的帮助! 问题答案

  • 在 Favorites(收藏夹)中,您可以储存并管理 Flow 网络服务中您最喜欢的训练目标。在手表上,您可以将您最喜爱的目标用作指定目标。有关更多信息,请参见 Flow 网络服务中的训练规划。 Flow 网络服务中的收藏数量没有限制。如果 Flow 网络服务中收藏夹数量超过 100 个,同步时列表中的前 100 个会传输到手表中。您可以通过拖放操作改变我的最爱的顺序。选择您要移动的“我的最爱”,

  • 在 Favorites(收藏夹)中,可在 Flow 网络服务及 Flow 移动应用中储存并管理您收藏的训练目标。您可以将收藏项目在手表上用作预定目标。有关更多信息,请参见在 Flow 网络服务中规划训练。 您可以看到手表中的数目上限。Flow 网络服务中的收藏项目数量没有限制。如果 Flow 网络服务中收藏项目数量超过 100 个,在同步时,列表中的前 100 个收藏项目会传输到手表中。您可以通过

  • 在 Favorites(我的最爱)中,您可以储存并管理 Polar Flow 网络服务中您最喜爱的训练目标。您的 M600 上的 Polar 应用程式一次最多可储存 20 个“我的最爱”。您可通过从Training(训练)下方的运动内容列表向左滑动来找到 Polar 应用程式上“我的最爱”训练目标。如果您的网络服务中收藏的最爱项目数量超过 20 个,则前 20 项会在同步时转移至 Polar 应用

  • 问题内容: 是否有任何跨浏览器书签/使用JavaScript添加到收藏夹。 搜索了一些列表,但没有任何作用。你能建议什么吗? 问题答案: jQuery版本 JavaScript(根据我在某人网站上找到的脚本进行了修改-我只是再也找不到该网站了,所以我不能给该人以荣誉): HTML: 如果您未在服务器上运行IE,则IE将会显示错误(将IE视为时,它不允许通过JavaScript的JavaScript

  • 问题内容: 我只是试图在我的注释点添加一个细节按钮而被卡住,不幸的是,我不知道该怎么做。有人可以帮我吗? 下图显示了我想要实现的目标。谢谢! MapKitViewController: 问题答案: 您做对了,您只需要实现这些方法即可添加按钮以及标题和副标题 iOS 8和Xcode 6 查看我的输出。