dudi
dudi

Reputation: 5743

Kotlin Fragment

I have a simply Activity. In this activity I want start a fragment. But the Fragment doesn't start.

This is my Activity

class MainActivity : AppCompatActivity() {


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    //start Homefragment
    startHomeFragment()
}

/**
 * Create Homefragment
 */
private fun  startHomeFragment() {
    val homeFragment = fragmentManager.findFragmentByTag(statics.TAG) ?: HomeFragment()
    fragmentManager.beginTransaction()
            .replace(R.id.container, homeFragment, statics.TAG)
            .commit()
}

And this is my Fragment

class HomeFragment : Fragment() {

object statics {
    @JvmField val TAG = "Homefragment"
}

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

    background_home.setBackgroundResource(R.drawable.gc_bg_home)

Upvotes: 2

Views: 2621

Answers (3)

DINA TAKLIT
DINA TAKLIT

Reputation: 8418

In Kotlin the onCreateView should be on this way

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

If you want to add somthing inside you fragment you can use onViewCreated method and do whatever you want here

  override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

          //Here u can call function of add listners to button...

        })
    }

Like this you gonna create a safe propriate code

Upvotes: 2

Miha_x64
Miha_x64

Reputation: 6373

All the code after

    return super.onCreateView(inflater, container, savedInstanceState)

is unreachable. Just read IDE warnings.

Also, layout becomes attached only if you returned it from onCreateView, i. e. return inflater.inflate(...).

Upvotes: 3

dudi
dudi

Reputation: 5743

Solved:

class HomeFragment : Fragment() {

object statics {
    @JvmField val TAG = "Homefragment"
}

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

    Toast.makeText(activity, "HomeFragment", Toast.LENGTH_SHORT).show()

    return inflater?.inflate(R.layout.fragment_home, container, false)

}

}

Upvotes: 0

Related Questions