android - 如何在 RecyclerView 项目点击上实现两个 OnClickListeners?
问题描述
我很困惑,因为我需要使用两个 OnClickListener 来满足两种不同的需求。我有一个 Recyclerview,一旦他的任何项目,一旦按下,就需要更改,我已经成功地使用OnBindViewHolder.itemView.setOnClickListener
现在,我希望通过同样的点击来更新我的 BottomAppBar,为此,我向我的 ItemHolder 类添加了一个接口。问题是,现在我一旦点击,由于界面(我猜)没有任何反应。
我知道理解我的情况可能有点复杂,所以我添加了以下代码来帮助解决这个问题:
public class MainActivity extends AppCompatActivity implements MultiViewTypeAdapter.IClickListener {
有这个功能:
@Override
public void onItemClick(View view, int position) {
int type = adapter.getItemViewType(position);
if (type == 0) {
bar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_END);
bar.replaceMenu(R.menu.bab_menu_chosen_project);
fab.setImageDrawable(getDrawable(R.drawable.ic_message_white_24dp));
}
else{
bar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_CENTER);
bar.replaceMenu(R.menu.bab_menu_primary);
fab.setImageDrawable(getDrawable(R.drawable.ic_reply_black_24dp));
}
}
适配器上的界面如下所示:
public interface IClickListener {
void onItemClick(View view, int position);
}
我目前正在做的
public static class SelectedProjectItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
是:
@Override
public void onClick(View v) {
listener.onItemClick(v, getAdapterPosition());
}
但是,我想要运行的是我正在做的事情
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int listPosition) {
是:
((SelectedProjectItemHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataSet.remove(listPosition);
dataSet.add(listPosition, unselectedCards.get(listPosition));
notifyItemChanged(listPosition);
}
});
我希望一次单击会发生两件事 - Recyclerview 上的项目将使用我描述的最后一段代码更改,我的 MainActivity 中的菜单将使用我描述的第一段代码更改。
感谢帮助!
解决方案
从 RecyclerView.ViewHolder 中删除以下代码
@Override
public void onClick(View v) {
listener.onItemClick(v, getAdapterPosition());
}
并在“itemView”中添加listner事件,点击如下:
((SelectedProjectItemHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
listener.onItemClick(v, getAdapterPosition());
}
dataSet.remove(listPosition);
dataSet.add(listPosition, unselectedCards.get(listPosition));
notifyItemChanged(listPosition);
}
});
推荐阅读
- php - 验证 reCaptcha v2 复选框是否已勾选
- angular - 为什么我的 Angular 代码没有按顺序打印/运行?
- php - 将 xampp 升级到最新版本和 php 7.1,但 php 在我的计算机中仍然是 php 5.6
- highcharts - x 轴上标签的宽度,在 Highcharts 中具有分组类别
- c - 无法连接到 Twitch IRC 服务器,IP 地址问题,C 语言
- python - 具有自定义持续时间的计时器/倒计时?
- c# - OpenXmlSDK 无法读取手动创建的 xlsx 文件:'指定的包无效。主要部分不见了。
- typescript - 我如何从一个安静且统一的 API 中消费?
- excel - 基于两个标准执行重复
- php - Laravel 查询结果第 1 页正确,但第 2 页不正确,因为第 2 页显示的记录不是期望记录