package com.example.musicplayer.view.main.collection; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.example.musicplayer.R; import com.example.musicplayer.adapter.LoveSongAdapter; import com.example.musicplayer.app.Constant; import com.example.musicplayer.callback.OnItemClickListener; import com.example.musicplayer.entiy.Love; import com.example.musicplayer.entiy.Song; import com.example.musicplayer.event.SongCollectionEvent; import com.example.musicplayer.service.PlayerService; import com.example.musicplayer.util.FileUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.litepal.LitePal; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * Created by 残渊 on 2018/11/30. */ public class CollectionFragment extends Fragment { private static final String TAG="CollectionFragment"; private RecyclerView mRecycler; private ImageView mBackIv; private LinearLayoutManager mManager; private LoveSongAdapter mAdapter; private List<Love> mLoveList; private PlayerService.PlayStatusBinder mPlayStatusBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mPlayStatusBinder = (PlayerService.PlayStatusBinder) service; } @Override public void onServiceDisconnected(ComponentName name) { } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View mView = inflater.inflate(R.layout.fragment_love, container, false); EventBus.getDefault().register(this); //注册事件订阅者 mRecycler = mView.findViewById(R.id.recycler_love_songs); mBackIv = mView.findViewById(R.id.iv_back); mLoveList = new ArrayList<>(); return mView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //启动服务 Intent playIntent = new Intent(getActivity(), PlayerService.class); Objects.requireNonNull(getActivity()).bindService(playIntent, connection, Context.BIND_AUTO_CREATE); showSongList(); onClick(); } @Override public void onDestroy(){ super.onDestroy(); EventBus.getDefault().unregister(this); Objects.requireNonNull(getActivity()).unbindService(connection); } @Subscribe(threadMode = ThreadMode.MAIN ) public void onMessageEvent(SongCollectionEvent songCollectionEvent){ mLoveList.clear(); mLoveList.addAll(orderList(LitePal.findAll(Love.class))); mAdapter.notifyDataSetChanged(); if(songCollectionEvent.isLove()){//定位歌曲 if (FileUtil.getSong() != null) { mManager.scrollToPositionWithOffset(FileUtil.getSong().getPosition() + 4, mRecycler.getHeight()); } } } private void showSongList() { mRecycler.setHasFixedSize(true); mLoveList.addAll(orderList(LitePal.findAll(Love.class))); mAdapter = new LoveSongAdapter(getActivity(), mLoveList); mManager = new LinearLayoutManager(getActivity()); mRecycler.setLayoutManager(mManager); mRecycler.setAdapter(mAdapter); mAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onClick(int position) { Love love = mLoveList.get(position); Song song = new Song(); song.setSongId(love.getSongId()); song.setQqId(love.getQqId()); song.setSongName(love.getName()); song.setSinger(love.getSinger()); song.setOnline(love.isOnline()); song.setUrl(love.getUrl()); song.setImgUrl(love.getPic()); song.setPosition(position); song.setDuration(love.getDuration()); song.setMediaId(love.getMediaId()); song.setListType(Constant.LIST_TYPE_LOVE); FileUtil.saveSong(song); mPlayStatusBinder.play(Constant.LIST_TYPE_LOVE); } }); } private void onClick() { mBackIv.setOnClickListener(v -> getActivity().getSupportFragmentManager().popBackStack()); } private List<Love> orderList(List<Love> tempList){ List<Love> loveList=new ArrayList<>(); loveList.clear(); for(int i=tempList.size()-1;i>=0;i--){ loveList.add(tempList.get(i)); } return loveList; } }