-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 Answer 1

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.