android - 如何检索在 RecyclerViewAdapter 中单击的最后一个位置的视图?
问题描述
我有一个RecyclerViewAdapter
歌曲列表类,当我触摸一首歌时,那首歌的背景变成蓝色。问题是如果我尝试触摸另一首歌曲,那首歌曲也会变成蓝色,但我无法找到解决方案来更改列表中之前触摸的歌曲以更改CardView
背面,这样一次只有一个项目会变成蓝色在任何给定的触摸。
内 :
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
final ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.setImageResourceType(mList, position);
viewHolder.getTxtViewTitle().setText(mList.get(position).getTitle());
viewHolder.getTxtViewArtist().setText(mList.get(position).getArtist());
viewHolder.getTxtViewDuration().setText(MusicUtil.GetDurationHMS(mList.get(position).getDuration()));
viewHolder.getCardView().setCardBackgroundColor(Color.argb(0, 0, 0, 0));
viewHolder.getCardView().setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
mListener.onRecyclerViewItemClicked(viewHolder, position, view.getId());
viewHolder.getCardView().setCardBackgroundColor(Color.BLUE);
mLastPosition = position; // To be used to store last position clicked
}
});
}
解决方案
管理lastHolder
适配器类中的全局变量。
viewHolder.getCardView().setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
mListener.onRecyclerViewItemClicked(viewHolder, position, view.getId());
viewHolder.getCardView().setCardBackgroundColor(Color.BLUE);
mLastPosition = position; // To be used to store last position clicked
if(lastHolder!=null)
{
// do your task here which you want to do for previous selection
lastHolder.getCardView().setCardBackgroundColor(Color.WHITE);
}
lastHolder=viewHolder;
}
});
推荐阅读
- snowflake-cloud-data-platform - 使用 Azure 数据工厂将数据引入到 Snowflake
- google-cloud-platform - 自动将容器注册表映像部署到 Cloud Run
- javascript - addEventListener 只是实现功能而不监听
- ios - 是否不需要第二个应用内购买项目注册的应用更新?
- javascript - 使用 PHP 8 验证 ECDSA P-384 或 P-256 签名
- c - 我可以在 Wayland 中获得 CapsLock 状态吗?
- android - 与 Realtimedatabase 一起使用时,recyclerView 问题中的 android studio emoji 反应对话框
- python - 在另一个列表中寻找元素,如果找到从第一个列表中删除它,python
- faunadb - 获取 ORDERBY Faunadb
- c# - For 循环不会在 C# Windows 窗体应用程序中创建新文本框