java - 如何在 recyclerview 适配器类中发送广播?
问题描述
我有一个RecyclerView显示设备上找到的所有歌曲。
适配器类
holder.constraintLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Store songList and songIndex in mSharedPreferences
storageUtil.storeSong(Main.musicList);
storageUtil.storeSongIndex(holder.getAdapterPosition());
//Send media with BroadcastReceiver
Intent broadCastReceiverIntent = new Intent(Constants.ACTIONS.BROADCAST_PlAY_NEW_SONG);
sendBroadcast(broadCastReceiverIntent);
Intent broadCastReceiverIntentUpdateSong = new Intent(Constants.ACTIONS.BROADCAST_UPDATE_SONG);
sendBroadcast(broadCastReceiverIntentUpdateSong);
}
});
我想要实现的是,当在RecyclerView中单击一首歌曲时,一个广播会发送到我的服务类,这样一首歌曲就会开始播放。
sendBroadcast 无法解决,那么如何从我的适配器类发送广播意图?
我也想知道这是否是正确的方法,或者是否有更好的方法在适配器中发送广播,因为我在某处读到BroadcastReceivers不属于适配器类。
解决方案
根本原因: sendBroadcast是Context
类的方法,因为你在Adapter
类中调用它,所以编译器显示错误“sendBroadcast 无法解析”。
解决方案:从视图实例中获取上下文,然后调用sendBroadcast
方法。
holder.constraintLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Store songList and songIndex in mSharedPreferences
storageUtil.storeSong(Main.musicList);
storageUtil.storeSongIndex(holder.getAdapterPosition());
// Obtain context from view instance.
Context context = v.getContext();
//Send media with BroadcastReceiver
Intent broadCastReceiverIntent = new Intent(Constants.ACTIONS.BROADCAST_PlAY_NEW_SONG);
context.sendBroadcast(broadCastReceiverIntent);
Intent broadCastReceiverIntentUpdateSong = new Intent(Constants.ACTIONS.BROADCAST_UPDATE_SONG);
context.sendBroadcast(broadCastReceiverIntentUpdateSong);
}
});
推荐阅读
- sql - SQL Server & XML:如何从 sql 表中获取 xml 属性?
- python - 如何在 python 中将 .csv 转换为 .npz?
- python - 强制一个特定值的线性回归
- linux - 找不到以下 Boost 库:boost_python2 尝试配置 boost 以使工作 pyopenpose
- powershell - PowerShell:匹配字符串,在多个文件中添加文本行尾
- .htaccess - .htaccess 重写规则意外行为
- php - 如何通过 PHP 记录来自我的 HTML 页面的访问者,并进行代码分离?
- java - Java 调用网站并查找所有照片
- c# - C# Access DB 更新查询没有执行,尽管它的行为就像它一样
- php - 通过php sdk从polar accesslink检索数据