代码结构:  这一次也是将MVP与JetPack进行了一个融合,这个框架断断续续维护了有大半年,写起逻辑来非常快且清晰,开源看一下示例:
class ArtistSongActivity : MusicActivity<ActivityArtistSongBinding>() {
private val songList = arrayListOf<SongBean>()
private lateinit var mAdapter: SongAdapter
private val artistSongPresenter by lazy<ArtistSongActivity, ArtistSongPresenter>()
companion object {
const val KEY_ARTIST_NAME = "key_artist_name"
}
override fun onBindingInflate(): ActivityArtistSongBinding {
return ActivityArtistSongBinding.inflate(layoutInflater)
}
override fun onInit() {
ActivityTools.swipeActivity(this)
val artistName = intent.getStringExtra(KEY_ARTIST_NAME)
binding.tvArtist.text = artistName
binding.ivBack.expandClick(16.0f)
binding.ivBack.setOnClickListener {
onBackPressed()
}
binding.fabPlaying.setSingleClick {
if (PlayManager.currentSong == null) {
ToastUtils.showShort("没有正在播放的歌曲")
return@setSingleClick
}
openActivity<MusicDetailActivity>()
}
binding.fabPlaying.setOnLongClickListener {
PlayManager.togglePlay()
true
}
mAdapter = SongAdapter(songList, CurrentListType.ARTIST)
binding.rvArtistSong.run {
layoutManager = LinearLayoutManager(context)
adapter = mAdapter
}
mAdapter.setEmptyView(R.layout.view_empty)
if (!TextUtils.isEmpty(artistName)) {
artistSongPresenter.sortArtistSong(artistName!!)
}
}
fun onSongSorted(currentSongs : List<SongBean>) {
songList.addAll(currentSongs)
mAdapter.notifyDataSetChanged()
}
}
package com.itant.music.main.artist.song
import com.itant.music.main.artist.ArtistManager
import com.itant.music.manager.PlayManager
import com.itant.music.utils.PinyinUtils
import com.miekir.common.widget.loading.LoadingType
import com.miekir.mvp.presenter.BasePresenter
import com.miekir.task.extension.launchTask
import java.util.*
class ArtistSongPresenter : BasePresenter<ArtistSongActivity>() {
fun sortArtistSong(artistName: String) {
launchTask(
{
val currentList = ArtistManager.artistSongMap[artistName]
PlayManager.currentSongList.clear()
if (currentList != null) {
Collections.sort(currentList, kotlin.Comparator { song1, song2 ->
PinyinUtils.ccs2Pinyin(song1.title)
.compareTo(PinyinUtils.ccs2Pinyin(song2.title), ignoreCase = true)
})
PlayManager.currentSongList.addAll(currentList)
}
PlayManager.currentSongList
}, onResult = { success, result, code, message ->
if (result != null) {
view?.onSongSorted(result)
}
}, loadingType = LoadingType.INVISIBLE
)
}
}
效果:   源码传送门
|