Я создаю приложение подкаста с одним действием, состоящим из 2 элементов:
- NavHostFragment
- ExoPlayerView (в данном случае только PlayerControlView с Id exoplayer_view)
Я хотел бы установить глобальную переменную со ссылкой на представление exoplayer, чтобы я мог использовать эту переменную в своих фрагментах и прикрепленных моделях просмотра для воспроизведения / остановки / загрузки аудио.Как бы я эффективно реализовал это в kotlin?
Прямо сейчас, всякий раз, когда мне нужен exoplayer внутри фрагмента, я воссоздаю переменную, подобную этой:
var exoplayerView = (activity as MainActivity).exoplayer_view
Установив глобальную переменную вактивность, мне не нужно делать это снова и снова по всему приложению.Это также, вероятно, менее исчерпывает память, чем создание другой ссылки в каждом фрагменте / модели представления.
MainActivity:
...
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
// global reference to use for all fragments, viewmodels and helper classes
var exoplayerView: PlayerControlView = exoplayer_view
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
....
}
override fun onStop() {
super.onStop()
releasePlayer(exoplayer_view)
}
}
Фрагмент:
class TracksFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
...
// make use of exoplayer reference within the fragment and/or viewmodel
// the exoplayerView variable can not be recognised here
if(exoplayerView.player==null) exoplayerView.player = viewModel.player
...
return binding.root
}
}
Я подумал, настроивссылка на exoplayerView, как это я мог бы получить его из моего фрагмента.Однако это не так.Как я могу сделать что-то подобное эффективным способом?