Я создаю простой аудиоплеер.У меня есть два RecyclerView, и я хочу увидеть список элементов из моего DataService, но я получаю исключение.Не могу понять, что пошло не так.
Когда я нажимаю на элемент «Аудио файлы 1» в предыдущем действии (RecyclerView), он должен показать мне список «unitOneSound».
Но я получаю ошибку:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nikolai.leader/com.example.nikolai.leader.Controller.SoundActivity}:
java.lang.IllegalStateException: songType не должен быть нулевым
Я думаю, что проблема с DataServiceпотому что, когда я меняю DataService.getSong(songType)
на DataService.unitOneSound
, он работает и показывает список песен, но для всех альбомов тот же список песен.
Адаптер:
class RecyclerSoundScreenAdapter(val context: Context, val song: List<SoundScreen>): RecyclerView.Adapter<RecyclerSoundScreenAdapter.Holder>() {
override fun onBindViewHolder(holder: Holder, position: Int) {
holder.bindActivity(song[position], context)
}
override fun getItemCount(): Int {
return song.count()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(context).inflate(R.layout.sound_template, parent, false)
return Holder(view)
}
inner class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val songName = itemView.findViewById<TextView>(R.id.sound_text_view)
fun bindActivity(sound: SoundScreen, context: Context) {
songName.text = sound.songTitle
}
}
}
Контроллер
class SoundActivity : AppCompatActivity() {
lateinit var adapter: RecyclerSoundScreenAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.sound_activity)
val songType = intent.getStringExtra("activity")
adapter = RecyclerSoundScreenAdapter(this, DataService.getSong(songType))
val layoutManager = LinearLayoutManager(this)
soundListView.layoutManager = layoutManager
soundListView.adapter = adapter
}
}
Модель:
class SoundScreen(var songTitle: String) {
override fun toString(): String {
return songTitle
}
}
DataService:
object DataService {
val unitOneSound = listOf(
SoundScreen("Song 1"),
SoundScreen("Song 2"),
SoundScreen("Song 3"),
SoundScreen("Song 4"),
SoundScreen("Song 5"),
SoundScreen("Song 6")
)
val unitTwoSound = listOf(
SoundScreen("Song 1"),
SoundScreen("Song 2"),
SoundScreen("Song 3"),
SoundScreen("Song 4"),
SoundScreen("Song 5"),
SoundScreen("Song 6")
)
val listOfSounds = listOf<SoundScreen>()
fun getSong(activity: String) : List<SoundScreen>{
return when(activity){
"Audio files 1" -> unitOneSound
"Audio files 2" -> unitTwoSound
else -> listOfSounds
}
}
Первая активность, с которой я начинаю свою звуковую деятельность
class SecondActivity : AppCompatActivity() {
lateinit var adapter : RecyclerSecondScreenAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.second_activity)
val activityType = intent.getStringExtra("unit")
adapter = RecyclerSecondScreenAdapter(this, DataService.getActivities(activityType)){ activity ->
val soundIntent = Intent(this, SoundActivity::class.java)
// soundIntent.putExtra(EXTRA_ACTIVITY, activity)
startActivity(soundIntent)
}
val layoutManager = LinearLayoutManager(this)
activityListView.layoutManager = layoutManager
activityListView.adapter = adapter
}
}