-2

I want to make an Android project with Kotlin, so I build it with kotlin and Databinding. It's nothing wrong with it. But when I use Kotlin Android Extensions or Butterknife, the app I built from this project can not be used normally.

Here is my fragment class

class MainFragment: Fragment() {

private var stock: StockQuote? = null

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
    val binding: FragmentMainBinding = DataBindingUtil.inflate(inflater!!, R.layout.fragment_main, container, false)
    binding.stock = stock
    search_et.setOnFocusChangeListener { v, hasFocus ->
        if(!hasFocus){
            val newStock = ScrapingUtil.getQuote(search_et?.text.toString())
            if(newStock != null){
                stock?.name = newStock.name
            }
        }
    }
    return binding.root
}

}

I tried to use Butterknife at first but it didn't work, the View I want to bind would be null. Then I tried to use Kotlin Android Extensions, it threw an error at runtime

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: cn.mister.stockcalculator, PID: 30010
              java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.mister.stockcalculator/cn.mister.stockcalculator.MainActivity}: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class fragment
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2736)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2807)
                  at android.app.ActivityThread.-wrap11(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1604)
                  at android.os.Handler.dispatchMessage(Handler.java:111)
                  at android.os.Looper.loop(Looper.java:191)
                  at android.app.ActivityThread.main(ActivityThread.java:6016)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821)
               Caused by: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class fragment
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                  at cn.mister.stockcalculator.MainActivity.onCreate(MainActivity.kt:10)
                  at android.app.Activity.performCreate(Activity.java:6370)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2689)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2807) 
                  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1604) 
                  at android.os.Handler.dispatchMessage(Handler.java:111) 
                  at android.os.Looper.loop(Looper.java:191) 
                  at android.app.ActivityThread.main(ActivityThread.java:6016) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821) 
               Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class fragment
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
                  at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                  at cn.mister.stockcalculator.MainActivity.onCreate(MainActivity.kt:10) 
                  at android.app.Activity.performCreate(Activity.java:6370) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1122) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2689) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2807) 
                  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1604) 
                  at android.os.Handler.dispatchMessage(Handler.java:111) 
                  at android.os.Looper.loop(Looper.java:191) 
                  at android.app.ActivityThread.main(ActivityThread.java:6016) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821) 
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setOnFocusChangeListener(android.view.View$OnFocusChangeListener)' on a null object reference
                  at cn.mister.stockcalculator.MainFragment.onCreateView(MainFragment.kt:23)
                  at android.app.Fragment.performCreateView(Fragment.java:2236)
                  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:962)
                  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1139)
                  at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1241)
                  at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2236)
                  at android.app.FragmentController.onCreateView(FragmentController.java:98)
                  at android.app.Activity.onCreateView(Activity.java:5678)
                  at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:41)
                  at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:68)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:754)

how can I fix it?

1 Answers1

0

I found the answer at Kotlin Android Extensions and Fragments.

DataBinding doesn't matter, you should directly access search_et in the onViewCreated method