我有一个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();
}
}
答案 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。
我没有把整个代码放在一起,因为我相信只要这样做,你就会知道实现它。
无论如何,我有它的工作代码。请随意给我打电话。
帮助解答的重要链接