Update SearchContentFragment.java

cw
pqj95kzpi 1 year ago
parent 3940cf1fbb
commit eaca0e153b

@ -45,48 +45,81 @@ import butterknife.BindView;
/**
* Created by on 2018/11/21.
* Fragment
*
* MVPISearchContentContract.View
* BaseLoadingFragment
*/
public class SearchContentFragment extends BaseLoadingFragment<SearchContentPresenter> implements ISearchContentContract.View {
private static final String TAG = "SearchContentFragment";
// 用于区分搜索类型的键值,在传递和获取参数时作为标识,表明是歌曲还是专辑等类型的搜索
public static final String TYPE_KEY = "type";
// 用于传递搜索内容的键值,在传递和获取参数时作为标识,存储用户输入的搜索关键字等信息
public static final String SEEK_KEY = "seek";
// 用于标识是否在线的键值(从代码中看可能未完整体现其使用场景,也许用于区分在线资源相关逻辑)
public static final String IS_ONLINE = "online";
// 用于记录当前搜索结果的页码偏移量初始化为1用于实现翻页搜索功能每次加载更多数据时递增
private int mOffset = 1; //用于翻页搜索
// 搜索内容的Presenter对象用于处理业务逻辑如发起搜索请求、获取更多数据等遵循MVP模式
private SearchContentPresenter mPresenter;
// 用于管理RecyclerView布局的线性布局管理器设置列表的布局方式如垂直排列等
private LinearLayoutManager manager;
// 搜索内容的适配器负责将搜索结果数据歌曲或专辑列表数据绑定到RecyclerView的每个Item视图上进行展示并处理相关点击等交互逻辑
private SearchContentAdapter mAdapter;
// 存储搜索到的歌曲列表数据的集合初始化为空的ArrayList后续从获取的数据中添加元素并展示
private ArrayList<SearchSong.DataBean.SongBean.ListBean> mSongList = new ArrayList<>();
// 存储搜索到的专辑列表数据的集合初始化为null后续根据搜索结果赋值并用于展示相关专辑信息
private List<Album.DataBean.AlbumBean.ListBean> mAlbumList;
// 用于支持RecyclerView下拉刷新和上拉加载更多功能的适配器对原始的mAdapter进行包装添加相关功能支持
private LRecyclerViewAdapter mLRecyclerViewAdapter;//下拉刷新
// 通过ButterKnife框架绑定的RecyclerView视图组件用于展示搜索结果列表支持下拉刷新和上拉加载更多功能
@BindView(R.id.normalView)
LRecyclerView mRecycler;
// 通过ButterKnife框架绑定的ImageView视图组件可能用于显示背景图片等相关用途从代码中未明确体现具体使用场景
@BindView(R.id.iv_background)
ImageView mBackgroundIv;
// 用于接收从外部传入的参数Bundle可能包含了搜索类型、搜索内容等相关数据用于在Fragment内部传递和使用
private Bundle mBundle;
// 用于存储搜索内容的字符串从传入的Bundle中获取代表用户输入的搜索关键字等信息
private String mSeek;
// 用于存储搜索类型的字符串从传入的Bundle中获取表明是歌曲还是专辑等类型的搜索
private String mType;
// 用于与播放服务进行交互的Binder对象通过它可以调用播放服务中的方法如控制播放等操作
private PlayerService.PlayStatusBinder mPlayStatusBinder;
// 定义与播放服务的连接对象用于监听服务的连接与断开状态并获取服务提供的Binder对象进行交互
private ServiceConnection connection = new ServiceConnection() {
/**
* IBinderPlayStatusBinder
* 便
* @param name
* @param service IBinder
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mPlayStatusBinder = (PlayerService.PlayStatusBinder) service;
}
/**
*
*
* @param name
*/
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
/**
* FragmentPresenter
* searchMore
*/
@Override
protected void loadData() {
if (mType.equals("song")) {
@ -97,6 +130,11 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
searchMore();
}
/**
* reload
* Presenter
* 使
*/
@Override
public void reload() {
super.reload();
@ -107,43 +145,75 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
}
}
/**
* FragmentIDfragment_search_contentID
* Fragment
* @return IDR.layout.fragment_search_content
*/
@Override
protected int getLayoutId() {
return R.layout.fragment_search_content;
}
/**
* initView
* EventBusBundle
* 线
*/
@Override
protected void initView() {
super.initView();
// 注册当前Fragment到EventBus用于接收事件例如歌曲在线状态变化、歌曲版权相关事件等用于更新界面等操作
EventBus.getDefault().register(this);
mBundle = getArguments();
if (mBundle != null) {
if (mBundle!= null) {
mSeek = mBundle.getString(SEEK_KEY);
mType = mBundle.getString(TYPE_KEY);
}
manager = new LinearLayoutManager(mActivity);
//启动服务
// 创建启动播放服务的Intent对象指定要启动的服务类为PlayerService
Intent playIntent = new Intent(getActivity(), PlayerService.class);
// 绑定播放服务通过传入的ServiceConnection对象监听服务连接状态
// 并设置绑定模式为自动创建服务(如果服务未启动则自动启动)
mActivity.bindService(playIntent, connection, Context.BIND_AUTO_CREATE);
}
/**
* FragmentPresenterSearchContentPresenter
* MVPPresenterPresenter
* @return PresenterSearchContentPresenter
*/
@Override
protected SearchContentPresenter getPresenter() {
mPresenter = new SearchContentPresenter();
return mPresenter ;
return mPresenter;
}
/**
* EventBusOnlineSongChangeEvent
*
* 线
* @param event OnlineSongChangeEvent
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onOnlineSongChangeEvent(OnlineSongChangeEvent event){
if(mAdapter!= null) mAdapter.notifyDataSetChanged();
public void onOnlineSongChangeEvent(OnlineSongChangeEvent event) {
if (mAdapter!= null) mAdapter.notifyDataSetChanged();
}
/**
* EventBusOnlineSongErrorEvent
* Toast
* @param event OnlineSongErrorEvent
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onOnlineSongErrorEvent(OnlineSongErrorEvent event){
public void onOnlineSongErrorEvent(OnlineSongErrorEvent event) {
showToast("抱歉该歌曲暂没有版权,搜搜其他歌曲吧");
}
/**
* FragmentEventBus
*
*/
@Override
public void onDestroy() {
super.onDestroy();
@ -151,7 +221,12 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
EventBus.getDefault().unregister(this);
}
/**
*
* RecyclerView
* Item
* @param songListBeans
*/
@Override
public void setSongsList(final ArrayList<SearchSong.DataBean.SongBean.ListBean> songListBeans) {
mSongList.addAll(songListBeans);
@ -160,23 +235,28 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
mRecycler.setLayoutManager(manager);
mRecycler.setAdapter(mLRecyclerViewAdapter);
//点击播放
// 为歌曲列表的适配器设置点击事件监听点击某个歌曲Item时执行以下逻辑
SearchContentAdapter.setItemClick(position -> {
SearchSong.DataBean.SongBean.ListBean dataBean = mSongList.get(position);
Song song = new Song();
song.setSongId(dataBean.getSongmid());
song.setSinger(getSinger(dataBean));
song.setSongName(dataBean.getSongname());
song.setImgUrl(Api.ALBUM_PIC+dataBean.getAlbummid()+Api.JPG);
song.setImgUrl(Api.ALBUM_PIC + dataBean.getAlbummid() + Api.JPG);
song.setDuration(dataBean.getInterval());
song.setOnline(true);
song.setMediaId(dataBean.getStrMediaMid());
song.setDownload(DownloadUtil.isExistOfDownloadSong(dataBean.getSongmid()));
//网络获取歌曲地址
// 调用Presenter的方法获取歌曲的播放地址用于后续播放操作
mPresenter.getSongUrl(song);
});
}
/**
*
* RecyclerView
* @param songListBeans
*/
@Override
public void searchMoreSuccess(ArrayList<SearchSong.DataBean.SongBean.ListBean> songListBeans) {
mSongList.addAll(songListBeans);
@ -184,11 +264,20 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
mRecycler.refreshComplete(Constant.OFFSET);
}
/**
* RecyclerView
*
*/
@Override
public void searchMoreError() {
mRecycler.setNoMore(true);
}
/**
* RecyclerView
* RecyclerViewPresenter
*
*/
@Override
public void searchMore() {
@ -202,13 +291,17 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
mPresenter.searchAlbumMore(mSeek, mOffset);
}
});
//设置底部加载颜色
// 设置底部加载提示的背景颜色、进度条颜色和文字颜色(具体颜色资源通过对应的R.color资源引用获取
mRecycler.setFooterViewColor(R.color.colorAccent, R.color.musicStyle_low, R.color.transparent);
//设置底部加载文字提示
// 设置底部加载文字提示信息,分别对应正在加载、加载完成、加载出错时的提示文本内容
mRecycler.setFooterViewHint("拼命加载中", "已经全部为你呈现了", "网络不给力啊,点击再试一次吧");
}
/**
* RecyclerView
* Presenter
*/
@Override
public void showSearcherMoreNetworkError() {
mRecycler.setOnNetWorkErrorListener(() -> {
@ -217,17 +310,12 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
});
}
@Override
public void searchAlbumSuccess(final List<Album.DataBean.AlbumBean.ListBean> albumList) {
mAlbumList = new ArrayList<>();
mAlbumList.addAll(albumList);
mAdapter = new SearchContentAdapter(mAlbumList, mSeek, getActivity(), Constant.TYPE_ALBUM);
mLRecyclerViewAdapter = new LRecyclerViewAdapter(mAdapter);
mRecycler.setLayoutManager(manager);
mRecycler.setAdapter(mLRecyclerViewAdapter);
SearchContentAdapter.setAlbumClick(position -> toAlbumContentFragment(mAlbumList.get(position)));
}
/**
*
* RecyclerView
* ItemFragmenttoAlbumContentFragment
* @param albumList
*/
@Override
public void searchAlbumMoreSuccess(List<Album.DataBean.AlbumBean.ListBean> songListBeans) {
mAlbumList.addAll(songListBeans);
@ -235,23 +323,34 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
mRecycler.refreshComplete(Constant.OFFSET);
}
/**
* Toast
*/
@Override
public void searchAlbumError() {
CommonUtil.showToast(getActivity(), "获取专辑信息失败");
}
/**
*
* FileUtil.saveSong
* Binder线
* @param song ID
* @param url
*/
@Override
public void getSongUrlSuccess(Song song,String url) {
public void getSongUrlSuccess(Song song, String url) {
song.setUrl(url);
FileUtil.saveSong(song);
mPlayStatusBinder.playOnline();
}
/**
* fragment
*
* @param type
* fragmentSearchContentFragment
* BundleFragment便Fragment
* @param seek
* @param type
* @return SearchContentFragment
*/
public static Fragment newInstance(String seek, String type) {
SearchContentFragment fragment = new SearchContentFragment();
@ -262,25 +361,38 @@ public class SearchContentFragment extends BaseLoadingFragment<SearchContentPres
return fragment;
}
/**
* FragmentActivityFragmentFragment
* FragmentFragmentR.id.fragment_container
* Fragment便Fragment
* @param album ID
* Fragment
*/
public void toAlbumContentFragment(Album.DataBean.AlbumBean.ListBean album) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
// 设置Fragment进入和退出的动画效果分别对应进入、退出、从右侧进入、从右侧退出的动画资源ID
transaction.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out, R.anim.slide_in_right, R.anim.slide_out_right);
transaction.add(R.id.fragment_container, AlbumContentFragment.
newInstance(album.getAlbumMID(), album.getAlbumName(), album.getAlbumPic(), album.getSingerName(), album.getPublicTime()));
transaction.hide(this);
//将事务提交到返回栈
// 将事务添加到返回栈按下返回键时可以按照添加顺序反向执行事务实现返回上一个Fragment的效果
transaction.addToBackStack(null);
transaction.commit();
}
/**
*
* 12便
* @param dataBean
* @return
*/
//获取歌手,因为歌手可能有很多个
private String getSinger( SearchSong.DataBean.SongBean.ListBean dataBean){
private String getSinger(SearchSong.DataBean.SongBean.ListBean dataBean) {
StringBuilder singer = new StringBuilder(dataBean.getSinger().get(0).getName());
for (int i = 1; i < dataBean.getSinger().size(); i++) {
singer.append("、").append(dataBean.getSinger().get(i).getName());
}
return singer.toString();
}
}
}
Loading…
Cancel
Save