Home > Blockchain >  setOnClickListener in Fragment with Kotlin
setOnClickListener in Fragment with Kotlin

Time:08-05

I am working on a sample code and I want a Button showing a message but it didn't work. App will open but buttonn didn't work

This app should show a Toast but it does not. I tried lateinit var firstComend : Button but didn't work too

I should sat will converting Activity to Fragment

Please help me

package com.mysfk.android.frogments

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.mysfk.android.R
import android.graphics.Color
import android.telephony.SmsManager
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Button
import android.widget.EditText
import android.widget.Toast


private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"



class OrderFragment : Fragment() {
    private var param1: String? = null
    private var param2: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val let = arguments?.let {
            param1 = it.getString(ARG_PARAM1)
            param2 = it.getString(ARG_PARAM2)
        }

     var firstComend = view?.findViewById<Button>(R.id.firstButton)
        firstComend?.setOnClickListener {
  
            Toast.makeText(context, "ارسال شد", Toast.LENGTH_SHORT).show()
        }

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_order, container, false)
    }

    companion object {
    
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            MessageFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }
}

CodePudding user response:

Try to set your click listener inside the onCreateView, like this:

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

        return inflater.inflate(R.layout.fragment_order, container, false)
        var firstComend = view?.findViewById<Button>(R.id.firstButton)
        firstComend?.setOnClickListener {
  
            Toast.makeText(context, "Test", Toast.LENGTH_SHORT).show()
        }
    }

CodePudding user response:

All view related decision must be done in onCreateView or onViewCreated

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

        return inflater.inflate(R.layout.fragment_order, container, false)
    }


override fun onViewCreated(view: View, savedInstanceState: Bundle?){
        var firstComend = view?.findViewById<Button>(R.id.firstButton)
        firstComend?.setOnClickListener {
           Toast.makeText(context, "Test", Toast.LENGTH_SHORT).show()
        }
}
  • Related