Search code examples
android-studiokotlindata-bindingandroid-mediaplayeronclicklistener

I don't know why this app is shutting down(because of databinding,setOnClickListener)


class day_1 : Fragment() {
// TODO: Rename and change types of parameters
private var param1: String? = null
private var param2: String? = null
private var _binding: FragmentDay1Binding? = null
private val binding get() = _binding!!
private var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    arguments?.let {
        param1 = it.getString(ARG_PARAM1)
        param2 = it.getString(ARG_PARAM2)


    }
    binding.startbutton.setOnClickListener {
        if (mediaPlayer == null) {
            mediaPlayer = MediaPlayer.create(activity, R.raw.days)
        }
        mediaPlayer?.start()
    }

    binding.pausebutton.setOnClickListener {
        if (mediaPlayer?.isPlaying == true) {
            mediaPlayer?.pause()
        } else {
            mediaPlayer?.start()
        }
    }

    binding.stopbutton.setOnClickListener {
        mediaPlayer?.stop()
        mediaPlayer = null
    }
     fun onStop() {
        super.onStop()
        mediaPlayer?.release()
        mediaPlayer = null
    }
}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {

    // Inflate the layout for this fragment
    _binding = FragmentDay1Binding.inflate(inflater,container,false)
    return binding.root
}
companion object {
    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment day_1.
     */
    // TODO: Rename and change types and number of parameters
    @JvmStatic
    fun newInstance(param1: String, param2: String) =
        day_1().apply {
            arguments = Bundle().apply {
                putString(ARG_PARAM1, param1)
                putString(ARG_PARAM2, param2)
            }
        }
}

what is above is my code. If I click the button, application was shutting down. First, I think that Media Player is problem. but application without setOnClickListener has no problem. Please help me masters.... Is it problem that setOnClickListener is in Fragment? And Can I amend this code? or I restart project? Perhaps If you know why this problem exist, Please tell me resolution...


Solution

  • You can take a look for fragment lifecycles at here https://developer.android.com/guide/fragments/lifecycle

    You are setting on click listener at onCreate method, in fragments views are created at onCreateView method so you are trying to access your view before it is created. So instead of onCreate method you need to set your click listener after your binding/view is ready, for example you can set your click listener before returning binding.root at onCreateView. Also you can set your click listener at onViewCreated method.